美文网首页
iOS开发中原子(atomic)和非原子(non-atomic)

iOS开发中原子(atomic)和非原子(non-atomic)

作者: 落叶兮兮 | 来源:发表于2020-07-27 19:04 被阅读0次

    (1)atomic:提供线程安全,是防止在写未完成的时候被另一个线程读取,造成数据错误(即阻止两个线程同时更新一个值)。
    (2)non-atomic:在自己管理的内存环境中,解析的访问器保留并自动释放返回的值,如果指定了nonatomic,那么访问器只是简单的返回这个值。

    但是,原子属性存在开销,所以过度使用它们并不明智。例如,如果能够保证某个属性在任何时刻都不会被多个线程访问,那最好还是将其标记为nonatomic,我们平常在开发时基本上都是使用nonatomic,原因有两个

    1.因为UIKit只允许在主线程中操纵UI元素,由于只会在指定的线程内进行访问,除了带来开销,将属性设置为atomic不会带来任何价值

    2.即使属性被设置为atomic, 其也不一定是线程安全的。例如,如果定义属性NSInteger i是原子的,对i进行i = i +1;操作就是不安全的,因为原子性只能保证读写安全,而该表达式需要三步操作
    (1)读取i的值存入寄存器
    (2)将i加1
    (3)修改i的值
    如果在第1步完成的时候i被其他线程修改了,那么表达式执行的结果就会和预期的不一样,也就是不安全的。

    相关文章

      网友评论

          本文标题:iOS开发中原子(atomic)和非原子(non-atomic)

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