前言
ios开发中使用@property声明属性时,经常要用到nonatomic和atomic这两个关键字,若不写会默认为atomic
@property (nonatomic,strong) UIImageView *imageView;
@property (atomic,retain) UIImage *image;
重点
atomic和nonatomic的区别在于:
- atomic是原子性的(原子性则表示这是一个不可再分的操作),nonatomic是非原子性的
- nonatomic和atomic系统自动生成的setter和getter方法不一样,atomic生成的是有加锁的,而nonatomic是没有加锁的,因此,nonatomic的线程不安全,但访问速度快,而atomic由于加速,访问速度会比nonatomic的要慢,但不一定是线程安全的
- atomic加锁只是保证setter和getter的有序性 - 比如:线程1调用了A的setter方法,当还没调用完时,线程2调用A的getter方法,但这时候线程2的调用要等线程1的完成才能进行,但是线程1调用了getter,线程2调用了setter,线程3调用了setter。那么这是后线程1调用getter后得出的值是不确定的,有可能是线程2操作后的值,也可能是线程3操作后的值
网友评论