使用atomic一定是線程安全的嗎?

一般當(dāng)我們想要保證對(duì)象屬性的線程安全的時(shí)候可以在定義屬性的時(shí)候用 atomic 關(guān)鍵字來修飾,那么
這篇文章讓我們來探討一下atomic和nonatomic分別都替我們做了什么工作

兩個(gè)關(guān)鍵字修飾的OC對(duì)象 系統(tǒng)都會(huì)自動(dòng)生成setter/getter方法势木,區(qū)別就在于一個(gè)會(huì)進(jìn)行加鎖操作,一個(gè)不會(huì)耻煤。系統(tǒng)默認(rèn)是使用atomic的。
因?yàn)閍tomic做了線程鎖,所以理論上講atomic是要比nonatomic更加耗費(fèi)性能哈蝇、更慢棺妓。
atomic 系統(tǒng)會(huì)在生成的setter/getter方法里添加鎖,但是這個(gè)鎖僅僅是保證了setter/getter存取的安全炮赦,并不能保證數(shù)據(jù)結(jié)果正確怜跑,舉個(gè)??

A線程執(zhí)行setter方法到一半的時(shí)候,B線程執(zhí)行g(shù)etter方法吠勘,那么B線程的getter方法會(huì)被阻塞性芬,等到setter繼續(xù)執(zhí)行完成之后才能取到值。這里系統(tǒng)使用的也是 @synchronized 可以參考這里

A剧防、B植锉、C等多個(gè)線程都要操作同一個(gè)對(duì)象setter,D線程要getter這個(gè)對(duì)象的值峭拘,那么每個(gè)線程都成保證各自數(shù)據(jù)的完整性俊庇,但是D線程最后get到的值并不能確定。

以上鸡挠,所以atomic能夠保證數(shù)據(jù)的完成性辉饱,也就是說他只是讀寫安全,并不能準(zhǔn)確定義說他是線程安全的拣展。因?yàn)榫€程可以對(duì)數(shù)據(jù)做很多操作彭沼,包括讀寫,還有release瞎惫、retain,假如說對(duì)一個(gè)已經(jīng)釋放的對(duì)象進(jìn)行release溜腐,就會(huì)導(dǎo)致crash

by the way

@synthesize和@dynamic的區(qū)別
@synthesize var= _var是默認(rèn)的译株,如果你沒有手動(dòng)實(shí)現(xiàn)setter/getter方法瓜喇,那么編譯器就會(huì)自動(dòng)給你加上這兩個(gè)方法
atomic關(guān)鍵字實(shí)現(xiàn)setter/getter方法如下

@synthesize username = _username;
- (void)setUsername:(NSString *)username {
    @synchronized(self) {
        if (_username != username) {
            _username = username;
        }
    }
   
}
- (NSString *)username {
    NSString * str = nil;
    @synchronized(self) {
        str = _username;
    }
    return str;
}

@dynamic 則是告訴編譯器,用戶自己去實(shí)現(xiàn)setter/getter方法歉糜,但是如果你這么申明了乘寒,最后卻沒有手動(dòng)去實(shí)現(xiàn),那么編譯可能是沒問題的匪补,可是到程序執(zhí)行到obj.var = svar的時(shí)候伞辛,會(huì)因?yàn)檎也坏椒椒ǘ鴆rash.

參考文檔
[爆棧熱門 iOS 問題] atomic 和 nonatomic 有什么區(qū)別?

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末夯缺,一起剝皮案震驚了整個(gè)濱河市蚤氏,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌踊兜,老刑警劉巖竿滨,帶你破解...
    沈念sama閱讀 217,084評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡于游,警方通過查閱死者的電腦和手機(jī)毁葱,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來贰剥,“玉大人倾剿,你說我怎么就攤上這事“龀桑” “怎么了前痘?”我有些...
    開封第一講書人閱讀 163,450評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)担忧。 經(jīng)常有香客問我际度,道長(zhǎng),這世上最難降的妖魔是什么涵妥? 我笑而不...
    開封第一講書人閱讀 58,322評(píng)論 1 293
  • 正文 為了忘掉前任乖菱,我火速辦了婚禮,結(jié)果婚禮上蓬网,老公的妹妹穿的比我還像新娘窒所。我一直安慰自己,他們只是感情好帆锋,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,370評(píng)論 6 390
  • 文/花漫 我一把揭開白布吵取。 她就那樣靜靜地躺著,像睡著了一般锯厢。 火紅的嫁衣襯著肌膚如雪皮官。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,274評(píng)論 1 300
  • 那天实辑,我揣著相機(jī)與錄音捺氢,去河邊找鬼。 笑死剪撬,一個(gè)胖子當(dāng)著我的面吹牛摄乒,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播残黑,決...
    沈念sama閱讀 40,126評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼馍佑,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了梨水?” 一聲冷哼從身側(cè)響起拭荤,我...
    開封第一講書人閱讀 38,980評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎疫诽,沒想到半個(gè)月后舅世,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體笼恰,經(jīng)...
    沈念sama閱讀 45,414評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,599評(píng)論 3 334
  • 正文 我和宋清朗相戀三年歇终,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了社证。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,773評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡评凝,死狀恐怖追葡,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情奕短,我是刑警寧澤宜肉,帶...
    沈念sama閱讀 35,470評(píng)論 5 344
  • 正文 年R本政府宣布,位于F島的核電站翎碑,受9級(jí)特大地震影響谬返,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜日杈,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,080評(píng)論 3 327
  • 文/蒙蒙 一遣铝、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧莉擒,春花似錦酿炸、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,713評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至鹿鳖,卻和暖如春扁眯,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背翅帜。 一陣腳步聲響...
    開封第一講書人閱讀 32,852評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工姻檀, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人藕甩。 一個(gè)月前我還...
    沈念sama閱讀 47,865評(píng)論 2 370
  • 正文 我出身青樓施敢,卻偏偏與公主長(zhǎng)得像周荐,于是被迫代替她去往敵國(guó)和親狭莱。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,689評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容