@property (nonatomic, strong) UIImage *defaultImage;
@property (atomic, strong) NSString *defaultName;
atomic:变量默认是有该有属性的,这个属性是为了保证在多线程的情况下,编译器会自动生成一些互斥加锁的代码,避免该变量的读写不同步的问题。
nonatomic:如果该对象无需考虑多线程的情况,这个属性会让编译器少生成一些互斥代码,可以提高效率。
atomic 的意思是setter/getter 这个函数,是一个原子操作,如果有多个线程同时调用setter的话,不会出现某一个线程执行完setter全部语句之前,另一个线程开始执行setter情况,相当于函数头尾加了锁一样,可以保证数据的完整性。nonatamic 不保证setter/getter 的原语行,所以你可能会取到不完整的东西。因此,在多线程的环境下的原子操作是非常必要的,否则可能会引起错误的结果。
本文深入解析Objective-C中atomic与nonatomic属性的作用与区别。atomic确保多线程环境下变量操作的原子性,通过加锁机制防止数据混乱;nonatomic则提高非多线程环境下的效率,但不保证原子性。
211

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



