美文网首页
atomic 和noatomic

atomic 和noatomic

作者: 富有的心 | 来源:发表于2017-09-04 17:18 被阅读0次

nonatomic:非原子的,非线程安全的,适合内存小的移动设备
atomic:原子的,线程安全的

不写的话默认就是atomic,atomic 和 nonatomic 的区别在于,系统自动生成的 getter/setter 方法不一样。如果你自己写 getter/setter,那 atomic/nonatomic/retain/assign/copy 这些关键字只起提示作用,写不写都一样

  • 一般iOS程序中,所有属性都声明为nonatomic
    这样做的原因是:在iOS中使用同步锁的开销比较大, 这会带来性能问题。一般情况下并不要求属性必须是“原子的”,因为atomic并不能保证“线程安全”(thread safety),若要实现“线程安全”的操作,还需采用更为深层的锁定机制才行。
    例如:一个线程在连续多次读取某个属性值的过程中有别的线程在同时改写该值,那么即便将属性声明为atomic,也还是会读取到不同的属性值。
    原因如下:
    假设有一个 atomic 的属性 "name",如果线程 A 调[self setName:@"A"],线程 B 调[self setName:@"B"],线程 C 调[self name],那么所有这些不同线程上的操作都将依次顺序执行——也就是说,如果一个线程正在执行 getter/setter,其他线程就得等待。因此,属性 name 是读/写安全的。
    但是,如果有另一个线程 D 同时在调[name release],那可能就会crash,因为 release 不受 getter/setter 操作的限制。

atomic属性只能说是读/写安全的,但并不是线程安全的,因为别的线程还能进行读写之外的其他操作。线程安全需要开发者自己来保证。

相关文章

  • atomic和noatomic

    atomic 用于保证属性的getter setter方法的原子属性操作,相当于在getter和setter内部增...

  • atomic 和noatomic

    nonatomic:非原子的,非线程安全的,适合内存小的移动设备atomic:原子的,线程安全的 不写的话默认就是...

  • iOS atomic noatomic

    iOS atomic noatomic atomic:可以保证属性的 setter 和 getter 都是原子性操...

  • atomic和noatomic原理分析

    atomic和noatomic的区别是什么?刚刚学iOS的时候是这样认识的:atomic是线程安全的,但它运行效率...

  • 多线程--互斥锁和自旋锁

    自旋锁(atomic 原子锁) OC在定义属性时,经常会提到noatomic和atomic的两种选择.相信大家都知...

  • iOS中的内存管理

    一.读写安全 1.atomic与noatomic 2.pthead_rwlock 3.dispatch_barri...

  • 2019年iOS面试题《一》

    讲讲你对noatomic & nonatomic的理解: atomic与nonatomic内部实现的区别只是ato...

  • iOS - 基础

    iOS 属性修饰关键字都有哪些? atomic 原子性访问,对属性赋值的时候加锁 noatomic 非原子...

  • iOS atomic 和nonatomic

    atomic:为setter方法加锁,原子属性。线程安全,消耗大量的资源。 noatomic:非原子属性,不会为s...

  • atomic是否线程安全?

    在申明属性的时候默认的是atomic原子性,在使用属性时我们会手动设置noatomic表示非原子性,这样做以提高访...

网友评论

      本文标题:atomic 和noatomic

      本文链接:https://www.haomeiwen.com/subject/kmyejxtx.html