readlony 代表只生成了get方法
atomic就代表方法进行枷锁,保证线程安全
nonatomic代表方法不许熬考虑线程问题,性能优化
copy setter方法release旧值,再copy新值
定义属性时,什么情况使用copy、assign、retain?
assign用于简单数据类型,如NSInteger,double,bool,
retain和copy用于对象, copy用于当a指向一个对象,b也想指向同样的对象的时候,如果用assign,a如果释放,再调用b会crash,如果用copy的方式,a和b各自有自己的内存,就可以解决这个问题。
retain 会使计数器加一,也可以解决assign的问题。另外:atomic和nonatomic用来决定编译器生成的getter和setter是否为原子操作。在多线程环境下,原子操作是必要的,否则有可能引起错误的结果。加了atomic,setter函数会变成下面这样:
if (property != newValue) {
[property release];
property = [newValue retain];
}
本文详细解释了Objective-C中属性的几种不同用法,包括assign、retain、copy的区别及适用场景,以及atomic和nonatomic的作用。
2万+

被折叠的 条评论
为什么被折叠?



