亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

iOS 屬性關鍵字atomic和nonatomic

標簽:
iOS

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,但是多线程不能保证具体取到的是哪个线程设置的值。

點擊查看更多內容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
移動開發工程師
手記
粉絲
32
獲贊與收藏
323

關注作者,訂閱最新文章

閱讀免費教程

  • 推薦
  • 評論
  • 收藏
  • 共同學習,寫下你的評論
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消