iOS开发中的属性声明
atomic:
原子操作在objective-c 属性设置里面 默认的就是atomic,
意思就是 setter /getter函数是一个原子操作,如果多线程同时调用setter时,
不会出现某一个线程执行完setter所有语句之前,另一个线程就开始执行setter,
相当于 函数头尾加了锁. 这样的话 并发访问性能会比较低.
nonatomic:
nonatomic则是直接从内存中取数值,因为它是从内存中取得数据,它并没有一个加锁的保护来用于cpu中的寄存器计算Value,它只是单纯的从内存地址中,当前的内存存储的数据结果来进行使用。所以在多线程中,我们应该对这样的变量进行nonatomic声明,因为它一直都能响应getter方法,防止你数据取到一半,结果数据释放了,或者数据 还在其他线程中正在写入。这就避免了
取到的数据不是你预期的那一个(尽管这一个并不是 另外一个线程正在修改的数据)。
readonly
不可以被赋值
assign
所有属性都 默认 assign,通常用于标量(简单变量 int, float, CGRect等)
一种典型情况是用在对对象没有所有权的时候,通常是 delegate,避免造成死循环(如果用 retain的话会死循环)
retain
属性必须是 objc对象,拥有对象所有权,必须在 dealloc中 release一次。
copy
属性必须是 objc对象,拥有对象所有权,必须在 dealloc中 release一次。且属性必须实现 NSCopying协议
一般常用于NSString 类型