Objective-c属性修饰关键字(assign retain copy strong weak)
一、线程相关:
【atomic/nonatomic】
(1)atomic[默认属性]:OC使用的一种线程保护技术,是防止在写未完成的时候被另外一个线程读取,造成数据错误。而这种机制是耗费系统资源的,所以在iPhone这种小型设备上,如果没有使用多线程间的通讯编程,那么nonatomic是一个非常好的选择。
(2)nonatomic:非原子性访问,属性赋值的时候不加锁,多线程并发访问会提高性能。但可能会造成不安全。如果不加该属性,则默认setter/getter两个方法都是原子性事务访问。所以,atomic和nonatomic用来决定编译器生成的getter,setter是否为原子操作。
二、赋值相关:
assign 默认(缺省) 基本数据类型的赋值
retain 对象的属性声明,引用计数加1
copy 对象的属性声明,赋值一个新的对象,但是引用对象不变
copy 和retain主要用于手动管理内存,但是也可以用于自动管理内存
ARC下使用
strong 增加一个对象的引用权限(引用计数加1)
weak 不会增加一个对象的引用权限,也是用于对象
基本使用规则:
非对象类型 使用assign 可以省略不写
对象类型 使用 retain/strong
NSString 使用copy/strong
总结:assign就是直接赋值,从而可能引起1中的问题,当数据为int,float等原生类型时,可以使用assign。retain使用了引用计数,retain引起引用计数+1,release引起引用计数-1.当引用计数为0时,dealloc函数被调用,内存被回收
【strong和weak】/ ARC下使用
(1)strong[默认值]:表明这是一个强引用。相当于retain属性。只要引用存在,对象就不能被销毁。当所有强引用消除时,对象才能被释放。
(2)weak:弱引用。相当于assign属性。一般为了避免retain cycles(就是父类中含有子类,父类retain了子类;子类中又调用了父类,子类又retain了父类),导致无法release,才会使用weak。
小结:(ARC下)你是不能使用retain,release,autorelease这些方法的,因为ARC会在必要的地方自动插入这些语句。所以我们需要在对象属性加上strong或者weak。
例子如下:
@property(nonatomic,assign) NSInteger number
Objective-c属性修饰关键字(assign retain copy strong weak)相关推荐
- 【转】Objective-C 属性特性(assign , retain , copy , readonly , readwrite , atomic , nonatomic)...
assign:指定setter方法用简单的赋值,这是默认操作.你可以对标量类型(如int)使用这个属性.你可以想象一个float,它不是一个对象,所以它不能retain.copy. assign:简单 ...
- assign/retain/copy各内存管理特性的差异
MRC下各内存管理特性 assign特性 当数据类型为int.float等原生类型时,可以使用assign,否则可能导致内存泄露.例如当使用malloc分配了一块内存,并把它的地址赋值给了指针a,后来 ...
- copy, retain, assign , readonly , readwrite,strong,weak,nonatomic整理
copy:建立一个索引计数为1的对象,然后释放旧对象 对NSString 对NSString 它指出,在赋值时使用传入值的一份拷贝.拷贝工作由copy方法执行,此属性只对那些实行了NSCopying协 ...
- assign, retain, copy, weak, strong
一.assign, retain, copy 的区别(引用计数 RC reference count) 参考:IOS基础:retain,copy,assign及autorelease 1. 假设你用m ...
- assign,copy,strong,weak,nonatomic的具体理解
例子: NSString *houseOfMM = [[NSString alloc] initWithString:'MM的三室两厅']; 上面一段代码会执行以下两个动作: 1 在堆上分配一段内 ...
- assign,copy,strong,weak,nonatomic的理解
举个例子: NSString *houseOfMM = [[NSString alloc] initWithString:'MM的三室两厅']; 上面一段代码会执行以下两个动作: 1 在堆上分配一 ...
- 对copy/strong/weak/__weak/__strong/assign的使用场景总结总结
ARC在编译期间,根据Objective-C对象的存活周期,在适当的位置添加retain和release代码.从概念上讲,ARC与手动引用计数内存管理遵循同样的内存管理规则,但是ARC也无法防止循环强 ...
- Objective-C之MRC、ARC模式下,属性修饰关键字strong、retain、assign、weak的区别和联系...
平时用strong.retain.assign.weak这几个关键字的时候,也没有过多的在意,下边就MRC.ARC模式下,每个关键字做一下总结.为了简明期间,采用表格的形式进行展示. MRC ARC ...
- retain/copy/assign区别
转自:http://blog.csdn.net/pjk1129/article/details/6457048#comments 在iphone程序中,属性合成中的retain/copy/assign ...
最新文章
- git clone 加速小技巧
- c与c++中struct区别
- 分布式、高并发、多线程,到底有什么区别?
- python生成柱状图 不显示_python – Matplotlib图表不显示在PyCharm中
- 面试官:高并发下重启服务,接口调用老是超时,你有什么解决办法?
- vue ---- 将项目打包发布
- c语言3到7位水仙花数流程图_C语言入门基础整理
- 使用libyuv对YUV数据进行缩放,旋转,镜像,裁剪等操作
- 机器学习算法一之基于K均值聚类算法实现数据聚类及二维图像像素分割
- 合宙 air720 模块通过串口助手连接到阿里云 IOT
- python对行为进行推理_一道有意思推理题,用python来解答
- 从零开始学前端 - 16. JS对象Object介绍及常用方法
- Jenkins自动化构建vue项目然后发布到远程服务器
- Uncaught TypeError: Cannot read property 'name' of null怎么处理
- kindeditor图片上传配置水印
- jenkins构建报错“Error occurred during initialization of VMCould not reserve enough space for 2097152KB”
- 用requests的get检验电视直播源是否有效的方法
- Excel高级筛选操作图解
- 开源DevOps工具在平台的未来
- 可编程电源秒变晶体管伏安特性测试仪