atomic是原子性的,nonatomic是非原子性的
atomic原子性并不能保证多线程安全,只是能保证数据的完整性
这个完整性体现在:使用者总能取到完整的值
例如以atomic修饰的属性name,A线程getter,B、C线程setter
这个name就有可能是B、C之前的初始name,也可能是B线程操作后的bName,也可能是C线程操作后的cName
nonatomic修饰的属性name的setter
-(void)setName:(NSString *)name
{
if (_name != name) {
[_name release];
//非原子性的getter可能不完整就出现在这里
_name = [name retain];
}
}
可能不完整指的就是在A线程setter时,b线程在上面的注释位置的时机getter,此时_name 释放掉了,可能取不到对象
###此时再说atomic的
-(void)setName:(NSString *)name
{
@synchronized(self) {
if (_name != name) {
[_name release];
_name = [name retain];
}
}
}
这里就跟nonatomic不一样了,setter中name不能被其他线程操作,所以肯定是完整的name,但是多线程不能保证具体取到的是哪个线程设置的值。
點(diǎn)擊查看更多內(nèi)容
為 TA 點(diǎn)贊
評(píng)論
評(píng)論
共同學(xué)習(xí),寫(xiě)下你的評(píng)論
評(píng)論加載中...
作者其他優(yōu)質(zhì)文章
正在加載中
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說(shuō)多少就多少
贊賞金額會(huì)直接到老師賬戶
支付方式
打開(kāi)微信掃一掃,即可進(jìn)行掃碼打賞哦