有人能详细解释一下,当我必须为声明的属性使用每个属性:nonatomic
、copy
、strong
、weak
等等,并解释每个属性的作用吗?举个例子也不错.我用的是ARC.
有人能详细解释一下,当我必须为声明的属性使用每个属性:nonatomic
、copy
、strong
、weak
等等,并解释每个属性的作用吗?举个例子也不错.我用的是ARC.
非原子的
将通过@synthesize
访问器生成线程安全 routine .atomic
将生成线程安全访问器,因此atomic
个变量是线程安全的(可以从多个线程访问,而无需修改数据)
当对象是可变的时,copy
是必需的.如果需要对象当前的值,并且不希望该值反映对象的其他所有者所做的任何更改,请使用此选项.由于要保留副本,因此在使用完对象后需要释放该对象.
分配
与copy
有点相反.调用assign
属性的getter时,它返回对实际数据的引用.通常,当您有一个基本类型的属性(float、int、BOOL…)时,您会使用这个属性
当属性是指向堆上分配的引用计数对象的指针时,retain
是必需的.分配应该类似于:
NSObject* obj = [[NSObject alloc] init]; // ref counted var
由@synthesize
生成的setter将在复制对象时向其添加引用计数,以便在原始副本超出范围时不会自动销毁基础对象.
完成后需要释放该对象.@property
秒使用retain
将增加引用计数并占用自动释放池中的内存.
strong
是保留属性的替换,作为Objective-C自动参考计数(ARC)的一部分.在非ARC代码中,它只是retain的同义词.
这是一个了解iOS 5的strong
和weak
的好网站.
Weak
weak
与strong
类似,只是它不会将引用计数增加1.它不会成为该对象的所有者,而只是持有对该对象的引用.如果对象的引用计数降至0,即使您可能仍在此处指向它,它也将从内存中释放.
上面的链接包含了关于Weak and 坚强的.的好信息