定义
定义属性中的特性有atomic、nonatomic、copy、assign、strong、weak等,一般格式如下:1
@property (nonatomic, strong) NSString *name;
使用
atomic
- 默认属性
- 当前进程进行到一半,其他线程来访问当前线程,可以保证先执行完毕当前线程
- 只是保证setter/getter 完整,不是线程安全
nonatomic
- 非默认属性
- 两个线程同时访问同一个属性将会导致无法预计的结果
- 优点是程序运行速度快
copy
- 是owner,不是reference(引用)。当对象可变时,可设置为copy,用于获取此时值的副本
- 使用copy创建的新对象也是强引用,使用完成后需要负责释放该对象
assign
- 与copy相反,只是reference,不是owner。只返回指针
- 用于float、int、BOOL等类型
- 释放后再发送消息会导致程序崩溃
strong
- 默认属性
- strong = retain iOS引入ARC后,用strong替代了retain
- 所有实例变量、局部变量默认都是strong
- 创建一个强引用的指针,引用对象引用计数加1
- 如果有多个对象同时引用一个属性,任一对象对该属性的修改都会影响其他对象获取的值
weak
- 只是reference,不是owner。即引用计数不会加1
- IBOutlet常用weak
- 可将weak对象设为nil,向nil发送消息,什么都不会执行,程序也不会崩溃
- 代理使用weak。delegate几乎一直own代理对象,所以代理对象应该对代理使用weak,否则会形成循环引用(retain cycle)。但也有例外,如果代理对象的生命周期比代理短,代理对象也可以使用strong
readonly
- 非默认属性
- 只有可读方法,也就是只有getter方法