iOS 各种修饰符的区别汇总

iOS 各种修饰符的区别汇总(推荐) atomic 设置成员变量的@property属性时,默认为atomic,提供多线程安全。 在多线程环境下,原子操作是必要的,否则有可能引起错误的结果。加了atomic,setter函数会变成下面这样: {lock} if (property != newValue) { [property release]; property = [newValue retain]; } {unlock} nonatomic 禁止多线程,变量保护,提高性能。 atomic是Objc使用的一种线程保护技术,基本上来讲,是防止在写未完成的时候被另外一个线程读取,造成数据错误。而这种机制是耗费系统资源的,所以在 立即下载

atomic
设置成员变量的@property属性时,默认为atomic,提供多线程安全。
在多线程环境下,原子操作是必要的,否则有可能引起错误的结果。加了atomic,setter函数会变成下面这样:
{lock}
if (property != newValue) { 
[property release]; 
property = [newValue retain]; 
}
{unlock}
nonatomic
禁止多线程,变量保护,提高性能。
atomic是Objc使用的一种线程保护技术,基本上来讲,是防止在写未完成的时候被另外一个线程读取,造成数据错误。而这种机制是耗费系统资源的,所以在iPhone这种小型设备上,如果没有使用多线程间的通讯编程,那么nonatomic是一个非常好的选择。

assign
对基础数据类型 (NSInteger,CGFloat)和C数据类型(int, float, double, char)等等。
此标记说明设置器直接进行赋值,这也是默认值。在使用垃圾收集的应用程序中,如果你要一个属性使用assign,且这个类符合NSCopying协 议,你就要明确指出这个标记,而不是简单地使用默认值,否则的话,你将得到一个编译警告。这再次向编译器说明你确实需要赋值,即使它是 可拷贝的。

retain
对其他NSObject和其子类对参数进行release旧值,再retain新值
指定retain会在赋值时唤醒传入值的retain消息。此属性只能用于Objective-C对象类型,而不能用于Core Foundation对象。(原因很明显,retain会增加对象的引用计数,而基本数据类型或者Core Foundation对象都没有引用计数——译者注)。
注意: 把对象添加到数组中时,引用计数将增加对象的引用次数+1。

copy
对NSString 它指出,在赋值时使用传入值的一份拷贝。拷贝工作由copy方法执行,此属性只对那些实行了NSCopying协议的对象类型有效。

copy与retain区别:
Copy其实是建立了一个相同的对象,而retain不是:
1.比如一个NSString 对象,地址为0×1111 ,内容为@”STR”,Copy 到另外一个NSString 之后,地址为0×2222 ,内容相同。
2.新的对象retain为1 ,旧有对象没有变化retain 到另外一个NSString 之后,地址相同(建立一个指针,指针拷贝),内容当然相同,这个对象的retain值+1。
总结:retain 是指针拷贝,copy 是内容拷贝。

assign与retain:
1. 接触过C,那么假设你用malloc分配了一块内存,并且把它的地址赋值给了指针a,后来你希望指针b也共享这块内存,于是你又把a赋值给(assign)了b。此时a和b指向同一块内存,请问当a不再需要这块内存,能否直接释放它?答案是否定的,因为a并不知道b是否还在使用这块内存,如果a释放了,那么b在使用这块内存的时候会引起程序crash掉。
2. 了解到1中assign的问题,那么如何解决?最简单的一个方法就是使用引用计数(reference counting),还是上面的那个例子,我们给那块内存设一个引用计数,当内存被分配并且赋值给a时,引用计数是1。当把a赋值给b时引用计数增加到2。这时如果a不再使用这块内存,它只需要把引用计数减1,表明自己不再拥有这块内存。b不再使用这块内存时也把引用计数减1。当引用计数变为0的时候,代表该内存不再被任何指针所引用,系统可以把它直接释放掉。

const
变量修饰符,只有只读权限,意思是这个参数只能读,不能修改内容,谁近修饰谁。
用途: 1.便于测试快速找到问题
2如果是大型算法可以快速找到是哪个模块出现错误
修饰位置:

register 

//register int b = 0;
变量前面加register修饰,编译器会优先将此变量放在寄存器中,这样对这个变量进行的各种操作及运算,会很快,(适用于嵌入式编程)当然CPU周边的用户可用空闲寄存器是有限的,所以当定义多个register修饰的变量后,当可用寄存器已被占完,后面的变量即便用register修饰,也是不起作用的,依然是在普通内存中为变量开辟空间。
static 
有时候我们非常希望,用一个小变量记录某函数调用的次数,解决这个问题 
方法1、可以使用全局变量;但是由于所有函数都可以修改它,对于较大程序出了问题不好调,所以使用全局变量并不好。
方法2、可以在目标函数中定义一个static变量(测试会发现这个变量的地址已经不再栈区,而是在数据区),每次进入函数让其++,static作用在局部变量前,函数结束此变量的值不清空,即改变了此变量的生命期,而且直到整个程序结束,并且此变量的值只有在定义它的函数中才可以被使用和重新赋值
extern 
extern int n;
extern可以扩展全局变量或函数的作用范围,只有全局变量或函数才可以用extern扩展
extern与register的区别

extern可以用来扩展函数的作用范围,可以跨文件扩展,前提是被扩展全局变量或者函数在定义时没有被static修饰!


简单来说,assign 修饰符用来修饰值类型和 id 类型(一般是 delegate)的属性,需要注意的是如果 id 类型的属性的修饰符用了 assign, 当你不再需要这个属性时,你必须将 delegate 手动置空,防止野指针产生,这也是为什么 delegate 一般都用 weak 修饰的原因。


weak 和 strong 是 ARC 的产物,分别表示弱引用类型和强引用类型。在给 strong 修饰的属性赋值时,会将属性的指针指向新值的地址,同时持有这个新值(新值的引用计数被加1)。在给 weak 修饰的属性赋值时,只是简单地将属性的指针指向新值的地址,不会持有新值。


retain 在 ARC 下基本等同于 strong。


copy 表示强引用,但是不会持有新值,而是拷贝一份引用计数为1的值给属性。给这种修饰符修饰的属性赋值时,实际上是把 新值调用 copy 方法后的返回值 赋给属性。NSString 类型常常用 copy 修饰,就是防止修改某个对象后,对强引用这个对象的属性造成不必要影响。


引用类型默认的修饰符是 strong.
值类型的默认修饰符是 assign.

【系列05】端侧AI:构建与部署高效的本地化AI模型 第4章:模型量化(Quantization) 量化的基本思想是减少模型中用于表示参数和激活值的比特数。在模型训练时,参数通常使用32位浮点数(FP32)进行存储,这提供了高精度,但也消耗大量的内存和计算资源。量化则将这些32位浮点数转换成低比特数表示,通常是8位整数(INT8)。量化的原理可以概括为:对浮点数范围进行校准,并将其映射到更小的整数范围内。例如,将一个FP32的权重(如-1.5到1.5)映射到INT8的范围(-128到127)。在推理过程中,模型将使用这些低精度的整数进行计算,从而大大减少了所需的计算量。量化带来的主要收益减少模型大小。 阅读详情

相关推荐

从DWS到设备树:MTK平台LK阶段GPIO初始化的隐秘路径与调试实战

本文深入探讨了MTK平台LK阶段GPIO初始化的完整流程,揭示了从DWS配置到设备树生成的隐秘转换路径。通过分析MT6768等平台的启动框架,提供了针对preloader到LK阶段GPIO初始化异常的实战调试方法与最佳实践,帮助开发者有效解决硬件与软件配置不匹配的常见问题。

h9j8k7l6m5n的博客 1003

[iOS]常用修饰符详解

这可以防止父对象和子对象之间形成循环引用。然而,与 weak 不同的是,当 unsafe_unretained 引用的对象被释放后,引用该对象的 unsafe_unretained 变量的值并不会自动置为 nil,而是会继续指向被释放的内存空间。在这个例子中,name 属性由 strong 修饰,因此当你将一个字符串赋值给 name 属性时,该字符串的引用计数会增加 1,反过来,当 MyObject 实例被释放时,name 属性也会被释放,这会导致赋给 name 属性的字符串的引用计数减少 1。

Gamin 2106

Disk Drill 使用教程

Disk Drill只需单击几下,即可恢复USB闪存驱动器上已删除的数据,包括丢失的照片,文档和其他文件类型。Disk Drill是真正的多合一应用程序,可在Mac上恢复闪存驱动器。Disk Drill将自动应用最佳的笔式驱动器恢复算法来恢复Mac数据。 USB闪存驱动器是一种传输和存储信息的好方法,但是如果错误地丢失或删除了存储在其中的文件,会发生什么呢?当您需要Mac的闪存驱动器数据恢复软件时,Disk Drill是您的最佳选择。Disk Drill将扫描您的USB闪存驱动器(也称为笔式驱动器)并查找

zjj778899的博客 1万+

iOS开发之属性修饰符

iOS开发之属性修饰符 多线程的特性 读写特性 访问修饰符 修饰符的用法介绍 一、多线程特性 默认:automic 1、automic:原子的,表示线程安全。使用automic的目的是为了确保其他线程不再同一时间内访问形同的资源。使用工程中不会被线程调度机制打断的操作,原子操作一旦开始,就要一直运行到结束,不会被打断。(编译器会自动生成互斥加锁的代码,避免变量的读写不同步)但往往即使声明了aut......

逝水无情的博客 2002

RseQC实战指南:从安装到RNA-Seq数据质控全流程解析

本文提供了一份详尽的RseQC实战指南,涵盖从安装配置到RNA-Seq数据质控的全流程。文章重点解析了RseQC作为专业质控工具的核心价值,手把手指导如何通过Conda或pip完成安装,并深入讲解了bam_stat.py、geneBody_coverage.py等关键模块的使用方法与结果解读技巧,帮助用户有效评估RNA完整性、文库构建质量及链特异性,确保下游分析的可靠性。

weixin_29200741的博客 199

CentOS 7 常用命令大全

CentOS中Linux命令

m0_63075763的博客 2017

IOS开发中的CGFloat、CGPoint、CGSize和CGRect

http://developer.apple.com/library/ios/#documentation/GraphicsImaging/Reference/CGGeometry/Reference/reference.html CGGeometry类定义几何元素的结构和操作几何元素的函数。 1、数据类型: CGFloat: 浮点值的基本类型 CGPoint: 表示一个二维坐标系中的点

浓浓的巧克力 1万+

保姆级教程:用MATLAB搞定运动模糊图片修复(附完整代码与避坑指南)

本文提供了一份详细的MATLAB运动模糊图片修复教程,涵盖盲复原、图像复原等核心技术。通过傅里叶变换和Radon变换分析模糊参数,对比逆滤波、维纳滤波和Lucy-Richardson算法效果,并附完整代码与避坑指南,帮助用户实现专业级图像处理。

weixin_26765363的博客 228

id类型

2.1.5 id类型 在Objective-C 中,id 类型是一个独特的数据类型。在概念上,类似Java 的Object 类,可以转换为任何数据类型。换句话说,id 类型的变量可以存放任何数据类型的对象。在内部处理上,这种类型被定义为指向对象的指针,实际上是一个指向这种对象的实例变量的指针。例如,下面定义了一个id类型的变量和返回一个id类型的方法: id anObject;  -

1023

【温室气体数据集】CAMS 发布的温室气体(GHG)数据集总结

【温室气体数据集】CAMS 发布的温室气体(GHG)数据集总结

WW、forever的博客 554

javafx结合Scene Builder自定义fxml实现漂亮的登录界面、自定义最小化、关闭按钮

本节主要介绍了如何结合Scene Builder工具来制作一个好看又漂亮的登录界面,以及介绍了如何在程序中调用生成界面文件fxml文件,如何获取到fxml文件中的组件等,并演示登录、最小化和关闭等功能。

c1007857613的专栏 5220

iOS面试题(一)

随着iOS平台开发的职位的增加,笔试、面试也越来越有“套路”,这里我总结了一些面试题,多数是Objective-C的基础知识,适合于面试新人,答案是我自己答的,不准确的地方,欢迎指出。 1.   Object-c的类可以多重继承么?可以实现多个接口么?Category是什么?重写一个类的方式用继承好还是分类好?为什么? Object-c的类不可以多重继承;可以实现多个接口,通过

xiaodong liang 900

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

iOS面试题收集整理(基础篇)

前言 前几个月一直在面试,收集一些网上的面试题,整理抄写,做面试准备,分享给大家.希望大家能够面试成功! ######分别写出MRC环境下在assign、retain、copy下属性name对应的setter方法的内部实现. *** ``` //assign环境下 -(void)setName:(NSString *)name{ _name = name; } //retain环境下 -(void)setName:(NSString *)name{ if (_name != name) { ..

得不到的永远是骚栋. 339

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

iOS 属性修饰符的区别

前言 iOS5 之前 所有的 开发都需要开发者自己控制自己的对象的引用和释放。使用的修饰符是 assign、copy、retain iOS5 之后,Apple 推出了ARC(自动引用计数)机制,推出了新的修饰符替代之前的修饰符 strong、weak简单说明 1:ARC环境下,strong代替retain.weak代替assign 2:weak的作用:在ARC环境下,,所有指向这个对象的w

iOS_HC的博客 3463

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

ios属性修饰符总结

ios属性修饰符总结 [email protected]�何使用,什么情况下使用哪种选项不了解,也问了我很多这方面的知识,虽然知道怎么用,但是有些说不出其区别。在这里,再次深入学习一遍,对copy/strong/weak/__weak/__strong/assign的使用场景总结总结。如果有说得不对的地方,请指出。如果有疑问,请私聊我,或者直接回复我。 自动引用计数

zcc1098066554的博客 1558

iOS基础之属性修饰符的区别

声明变量的修饰符:__strong, __weak, __unsafe_unretained, __autoreleasing 声明属性的修饰符:strong, weak, unsafe_unretained,readwrite或者readonly:指定属性是否可读写,默认是读写默认strong, readWrite的。 nonatomic和atomic:是否是原子性的

十万个逗的博客 3258

iOS修饰符copy以及strong区别

iOS开发-------属性用copy、strong修饰的区别     Copy,Strong的区别需要了解点内存管理的知识,Strong是ARC下引入的修饰,相当于手动管理内存(MRC)下的retain,在相关代码下,常常看到有的人用copy修饰NSString,NSArray,NSDictionary..等存在可变与不可变之分的对象,常常会用copy,而不是strong,下面代码来解释一下st...

m0_37728535的博客 537

iOS属性修饰符

当我们使用property来定义属性的时候,往往会为属性添加很多的修饰符,例如:nonatomic、assign、copy、strong、weak等等,本文将讨论这些属性修饰符的作用。 1、atomic 这个英文单词直译过来的话,是“原子的”的意思,那么在iOS中,“原子”代表着处理事件的一个完整操作,我们利用atomic这个关键字来定义属性,那么这个属性的setter和getter方法将具有

nineteen_的博客 994

ios属性修饰符

ios5之前是MRC,内存需要程序员进行管理,ios5之后是ARC,除非特殊情况,比如C框架或者循环引用,其他时候是不需要程序员手动管理内存的。 1. 自定义getter | setter方法名修饰符 : getter和setter2. 原子性修饰符:atomic | nonatomic3. 读写性修饰符:readwrite | readonly4. setter相关修饰符:assign | ret

muyanche的博客 487

iOS日常开发之property修饰符以及各个修饰符区别

一.@property OC的属性(property)是通过用@property定义的公有或者私有的方法。属性(property)提供了一种安全、便捷的方式来与这些属性(attribute)交互,而不需要手动编写一系列的访问方法,如果需要的话可以自定义getter和setter方法来覆盖编译器自动生成的相关方法。 尽量多的使用属性(property)而不是实例变量(attribute)因为属性(property)相比实例变量有很多的好处: (1)自动合成getter和setter方法。当声明一个属性(

天佑木枫 556

iOS中copy和strong修饰符的区别

iOS中copy和strong修饰符的区别 //用copys修饰的生成的都是不可变的对象 ,如果调用可变类型方法的直接报错 @property(nonatomic,copy)NSString * cpStr; @property(nonatomic,strong)NSString *strongStr; 1.当copy的对象类型为不可变对象如NSString类型时,和Stro...

weixin_30912051的博客 132

iOS的property相关修饰符

iOS的property相关修饰符你如果参加过面试,80%的可能性会被问到过,@property的修饰符有哪些,区别又是什么;既然想深入的了解我们就要知道它的来龙去脉,首先,我们的得知道什么是property。PropertyOC中称为属性,采用此属性,编译器会自动帮我们合成一个变量以及setter、getter方法,比如:@property NSString * name;则系统会默认帮我们合成

zyx196的博客 1487

iOS之属性修饰符 retain、strong和copy区别测试

时不时会有点迷惑属性修饰符retain、strong、copy三者之间的区别,还是把测试过程记录下来好一点! 一、属性修饰符retain、strong、copy修饰字符串测试 先看代码,创建一个Person类,定义属性 #import <Foundation/Foundation.h> @interface Person : NSObject @property (nona...

我爱编程持之以恒 910

IOS中变量类型与访问修饰符

在学习完我的这篇文章之后相信你会对变量类型和属性有更加清晰的认识,同时也会对属性的概念不那么模糊,如果你喜欢我的文章的话,可以给我点个赞吗,谢谢

qq_52041970的博客 1317
上一篇: Spring mvc 注解总结 (下)
下一篇: NSString属性什么时候用copy,什么时候用strong?
lin_transform
博客等级 码龄9年 3粉丝 22原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值