美文网首页
属性修饰词nonatomic和atomic的区别——2022-0

属性修饰词nonatomic和atomic的区别——2022-0

作者: 景彧 | 来源:发表于2022-08-14 14:11 被阅读0次

    单词解释:

    atom:原子
    atomic:原子性的
    nonatomic:非原子性的

    结论:

    1、atomic用于保证属性getter、setter的原子性操作,相当于是在getter、setter内部加了线程同步的锁
    2、atomic并不能保证使用属性的过程是线程安全的。

    解释1:

    给属性加上atomic修饰,可以保证属性的setter和getter都是原子性操作,也就是保证setter和getter内部是线程同步的。相当于是给属性的setter和getter一个加锁解锁的操作。

    原子性操作:理解为不可分割的整体

    int a = 1;
    int b = 2;
    int c = a + b;
    

    假如以上三行代码是原子性操作,在多线程环境下运行,在某一线程执行到该代码时,那就要求三行代码执行完,才算真的执行完,别的线程才能进入执行。

    atomic属性如图,在setter和getter内部会有加锁/解锁的操作:


    image.png

    解释2:

    image.png
    如图中ViewController的data属性是atomic修饰的,所以保证了data属性getter、setter原子性操作,线程安全。但是[self.data addObject:@"1"];里的addObject操作并不能保证,如需保证线程安全,则需要在addObject前后加解锁操作。

    解释3:

    nonatomic属性就是非原子性操作、非线程安全的

    iOS中不使用atomic的原因:
    1、atomic太耗性能,iOS中会经常会对属性进行getter和setter操作,再加上iOS的内存也不多,使用atomic会很浪费内存资源;
    2、大部分情况下,不会出现多条线程同时去调用一个对象的getter或setter方法;

    相关文章

      网友评论

          本文标题:属性修饰词nonatomic和atomic的区别——2022-0

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