单词解释:
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方法;
网友评论