iOS atomic 和 nonatomic 区别

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只是读写安全,并不能保证线程安全,因为别的线程还能进行读写之外的操作。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容