atomic和nonatomic的主要区别在于系统生成的getter和setter方法不同。
atomic:
- 声明属性时在不添加atomic和nonatomic的情况下,默认是atomic
- 对同一对象的set和get是顺序执行的
- 速度较慢,因为要保证操作整体完成
- 线程安全(但也不是绝对安全),需要消耗大量的系统资源来为属性加锁。
nonatomic:
- 不是默认的
- 线程不安全
- 更快
@property (atomic , strong) NSString *name;
如果:
线程A调用[self setName:@""]
线程B调用[self setName:@""]
线程C调用[self name]
所有这些线程上的操做都会依次顺序执行,也就是说其中一个线程在执行getter或setter操作时,其他线程必须等待,所以name属性的读/写是安全的。
线程D调用[name release]
可能会造成crash,因为release不受getter或setter操作的限制。因此atomic只是读写安全,并不能保证线程安全,因为别的线程还能进行读写之外的操作。
网友评论