非原子属性nonatomic
和原子属性atomic
原子属性atomic
:就是为了保证这个属性的安全性(线程安全),就是针对于多线程的设计的
默认的是atomic
,为什么平时用非原子属性nonatomic
而不是原子属性atomic
:当我们用原子属性atomic
属性的时候,我们对这个属性的的(写操作加锁,读操作不加锁)相当于上了把锁(这把锁叫 自旋锁),保证同一时间就只有一个线程能够执行,保证数据安全,性能会差点。除非这个属性可能会被多线程访问
- 自旋锁 和 互斥锁
共同点:都能保证线程安全
不同点:
互斥锁:如果线程被锁在外面,那么这个线程就会进入休眠的状态,等待锁打开,线程就会被唤醒进入就绪状态
自旋锁:如果线程被锁在外面,线程就会用死循环的方法一直等待锁打开,并不是休眠
无论什么锁,都很消耗性能,效率不高
在单写多读的一种多线程技术,同样可能出现脏数据
一般开发建议
- 所有的属性都声明为
nonatomic
- 应尽量避免多线程抢夺同一块资源
- 尽量将加锁,资源抢夺的业务逻辑交给服务器端去处理
网友评论