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

单词解释:

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-08-14)