nonatomic和atomic\retain和copy和assign之间的区别
来源:互联网 发布:软件评测师培训 编辑:程序博客网 时间:2024/04/29 16:03
1、nonatomic和atomic之间的区别
要与@synthesize一起使用才有意义。 atomic的意思就是setter/getter这个函数是一个原语操作。如果有多个线程同时调用setter的话,不会出现某一个线程执行setter全部语句之前,另一个线程开始执行setter情况,相当于函数头尾加了锁一样。 nonatomic不保证setter/getter的原语行,所以你可能会取到不完整的东西。 比如setter函数里面改变两个成员变量,如果你用nonatomic的话,getter可能会取到只更改了其中一个变量时候的状态。
2、copy\retain\assign
如果声明了retain的property,那就必须在dealloc中release。
IBOutlet建议使用property。
01.* assign: 简单赋值,不更改索引计数(Reference Counting)。
02.* copy: 建立一个索引计数为1的对象,然后释放旧对象。
03.* retain:释放旧的对象,将旧对象的值赋予输入对象,再提高输入对象的索引计数为1
还可以这样理解:
01.* 使用assign: 对基础数据类型 (NSInteger)和C数据类型(int, float, double, char,等);
02.* 使用copy: 对NSString;
03.* 使用retain: 对其他NSObject和其子类;
assign表示直接传递引用给属性值retain表示将某个对象引用传递给属性值时,属性值会将引用计数加一,也就是说,属性会自己额外保留一份引用.举例子说.NSObject a= [[NSObject alloc] init];classb.oneProperty = a;[a release];如果是assign的话,a被release之后,classb的oneProperty就不能再被使用.如果是retian的话,a被release之后,classb的oneProperty就可以继续使用.assign主要是int,long,bool原始数据类型.你可以试一试当你用原始数据类型retain的时候,编译会报错的。 assign 怀疑是多对一的关系,比如a被赋给b,c,d。则a,b,c,d都直接指向a的内存。结构如a->M,b->M,c->M,d->M。release时,都是直接释放M的空间。retain 怀疑也是多对一的关系,只是在assign的基础上增加了引用计数count。结构如a->M,b->M,c->M,d->M。release时,不是直接释放M,而是检查count,count>0,count--;否则,才释放M的空间。
- alloc
为对象分配内存并返回该对象,其保留计数为1。
您拥有以单词alloc或new开头的任意方法创建的对象。
- copy
为对象创建一份副本并返回该对象,其保留计数为1。
如果您复制一个对象,您就拥有了这个对象的副本。这对于任何名字中包含单词copy的方法都是适用的,这里的“copy”是指被返回的对象。
- retain
使一个对象的保留计数增加1。
获得一个对象的所有权。
- release
使一个对象的保留计数减少1。
释放一个对象的所有权。
- autorelease
使一个对象的引用计数在未来的某个阶段减少1。
在未来的某个阶段释放一个对象的所有权。
- nonatomic和atomic\retain和copy和assign之间的区别
- retain和copy还有assign的区别,atomic和nonatomic的用途
- retain和copy还有assign的区别,atomic和nonatomic的用途
- retain和copy还有assign的区别,atomic和nonatomic的用途
- atomic和nonatomic assign retain
- IOS atomic与nonatomic,assign,copy与retain的定义和区别
- IOS atomic与nonatomic,assign,copy与retain的定义和区别
- IOS atomic与nonatomic,assign,copy与retain的定义和区别
- IOS atomic与nonatomic,assign,copy与retain的定义和区别
- atomic与nonatomic,assign,copy与retain的定义和区别
- IOS atomic与nonatomic,assign,copy与retain的定义和区别
- IOS atomic与nonatomic,assign,copy与retain的定义和区别
- IOS atomic与nonatomic,assign,copy与retain的定义和区别
- IOS atomic与nonatomic,assign,copy与retain的定义和区别
- iOS atomic与nonatomic,assign,copy与retain的定义和区别
- IOS atomic与nonatomic,assign,copy与retain的定义和区别
- IOS atomic与nonatomic,assign,copy与retain的定义和区别
- IOS atomic与nonatomic,assign,copy与retain的定义和区别
- SQL Server 更新所有作业状态为禁用的脚步
- make android ime disappear
- 《Windows via C/C++》学习笔记 —— Windows 线程
- Facebook的下一个百亿美元业务就在这张草图里?
- oracle導出
- nonatomic和atomic\retain和copy和assign之间的区别
- 宏定义中的do { } while(0)语句
- frameset框架例子
- hdu1856
- ThinkPHP 连接Oracle数据库的详细教程(2)
- 测试建模:启发式测试策略模型(Heuristic Test Strategy Model)
- C文本流、二进制流的区别
- select下拉框回显的几种方法
- 常见排序算法总结