####1. @property属性的用法
- weak(assign) : 代理\UI控件
- strong(retain) : 其他对象(除代理\UI控件\字符串以外的对象)
- copy : 字符串(NSString\NSMutableString\block)
- assign : 非对象类型(基本数据类型int\float\BOOL\枚举\结构体)
####2. 原子和非原子属性
- 原子和非原子属性
-
OC在定义属性时有nonatomic和atomic两种选择
- atomic:原子属性,为setter方法加锁(默认就是atomic)
- nonatomic:非原子属性,不会为setter方法加锁
-
atomic加锁原理
@property (assign, atomic) int age;
-(void)setAge:(int)age {
@synchronized(self) {
_age = age;
}
}
- 原子和非原子属性的选择
-
nonatomic和atomic对比
- atomic:线程安全,需要消耗大量的资源
- nonatomic:非线程安全,适合内存小的移动设备
-
iOS开发的建议
- 所有属性都声明为nonatomic
- 尽量避免多线程抢夺同一块资源
- 尽量将加锁、资源抢夺的业务逻辑交给服务器端处理,减小移动客户端的压力