[OC]之 atomic 与 nonatomic的区别

一般iOS程序中,所有属性都声明为nonatomic,默认的是atomic的。这样做的原因是:
在iOS中使用同步锁的开销比较大, 这会带来性能问题。一般情况下并不要求属性必须是“原子的”,因为这并不能保证“线程安全”(thread safety),若要实现“线程安全”的操作,还需采用更为深层的锁定机制才醒。

atomic 系统会在生成的setter/getter方法里添加锁,但是这个锁仅仅是保证了setter/getter存取的安全。

 

atomic更准确的说应该是读写安全,但并不是线程安全的,因为别的线程还能进行读写之外的其他的对属性的操作。线程安全需要开发者自己来保证,比如A、B线程读写,C线程release,以及其他不通过setter/getter操作该属性。

 

atomic属性内部的锁称为自旋锁
自旋锁表示如果共享数据已经有其他线程加锁了,线程会以do while死循环的方式等待锁,一旦被访问的资源被解锁,则等待资源的线程会立即执行。

自旋锁现在苹果已经不建议使用了,详细见YY作者的文章

https://blog.ibireme.com/2016/01/16/spinlock_is_unsafe_in_ios/?utm_source=tuicool

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值