(轉(zhuǎn))atomic 和 nonatomic 有什么區(qū)別乾戏?

在定義 property 的時(shí)候轴总,atomic 和 nonatomic 有何區(qū)別沟绪?

@property(nonatomic, retain) UITextField *userName;

@property(atomic, retain) UITextField *userName;

@property(retain) UITextField *userName;

這仨有什么不同?


后兩行是一樣的惫谤,不寫的話默認(rèn)就是atomic壁顶。

atomic 和 nonatomic 的區(qū)別在于珠洗,系統(tǒng)自動(dòng)生成的 getter/setter 方法不一樣溜歪。如果你自己寫 getter/setter,那 atomic/nonatomic/retain/assign/copy 這些關(guān)鍵字只起提示作用许蓖,寫不寫都一樣蝴猪。

對(duì)于atomic的屬性调衰,系統(tǒng)生成的 getter/setter 會(huì)保證 get、set 操作的完整性自阱,不受其他線程影響嚎莉。比如,線程 A 的 getter 方法運(yùn)行到一半沛豌,線程 B 調(diào)用了 setter:那么線程 A 的 getter 還是能得到一個(gè)完好無損的對(duì)象趋箩。

而nonatomic就沒有這個(gè)保證了。所以加派,nonatomic的速度要比atomic快叫确。

不過atomic可并不能保證線程安全。如果線程 A 調(diào)了 getter芍锦,與此同時(shí)線程 B 竹勉、線程 C 都調(diào)了 setter——那最后線程 A get 到的值,3種都有可能:可能是 B娄琉、C set 之前原始的值次乓,也可能是 B set 的值,也可能是 C set 的值孽水。同時(shí)票腰,最終這個(gè)屬性的值,可能是 B set 的值女气,也有可能是 C set 的值丧慈。

保證數(shù)據(jù)完整性——這個(gè)多線程編程的最大挑戰(zhàn)之一——往往還需要借助其他手段。


是默認(rèn)的

會(huì)保證 CPU 能在別的線程來訪問這個(gè)屬性之前主卫,先執(zhí)行完當(dāng)前流程

速度不快逃默,因?yàn)橐WC操作整體完成

Non-Atomic

不是默認(rèn)的

更快

線程不安全

如有兩個(gè)線程訪問同一個(gè)屬性,會(huì)出現(xiàn)無法預(yù)料的結(jié)果


假設(shè)有一個(gè) atomic 的屬性 "name"簇搅,如果線程 A 調(diào)[self setName:@"A"]完域,線程 B 調(diào)[self setName:@"B"],線程 C 調(diào)[self name]瘩将,那么所有這些不同線程上的操作都將依次順序執(zhí)行——也就是說吟税,如果一個(gè)線程正在執(zhí)行 getter/setter,其他線程就得等待姿现。因此肠仪,屬性 name 是讀/寫安全的。

但是备典,如果有另一個(gè)線程 D 同時(shí)在調(diào)[name release]异旧,那可能就會(huì)crash,因?yàn)?release 不受 getter/setter 操作的限制提佣。也就是說吮蛹,這個(gè)屬性只能說是讀/寫安全的荤崇,但并不是線程安全的,因?yàn)閯e的線程還能進(jìn)行讀寫之外的其他操作潮针。線程安全需要開發(fā)者自己來保證术荤。

如果 name 屬性是 nonatomic 的,那么上面例子里的所有線程 A每篷、B瓣戚、C、D 都可以同時(shí)執(zhí)行焦读,可能導(dǎo)致無法預(yù)料的結(jié)果带兜。如果是 atomic 的,那么 A吨灭、B刚照、C 會(huì)串行,而 D 還是并行的喧兄。


簡單來說无畔,就是 atomic 會(huì)加一個(gè)鎖來保障線程安全,并且引用計(jì)數(shù)會(huì) +1吠冤,來向調(diào)用者保證這個(gè)對(duì)象會(huì)一直存在浑彰。假如不這樣做,如有另一個(gè)線程調(diào) setter拯辙,可能會(huì)出現(xiàn)線程競(jìng)態(tài)郭变,導(dǎo)致引用計(jì)數(shù)降到0,原來那個(gè)對(duì)象就釋放掉了涯保。

Jonathan Sterling 評(píng)論:要注意那個(gè)鎖并不能『保證線程安全』诉濒。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市夕春,隨后出現(xiàn)的幾起案子未荒,更是在濱河造成了極大的恐慌,老刑警劉巖及志,帶你破解...
    沈念sama閱讀 216,591評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件片排,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡速侈,警方通過查閱死者的電腦和手機(jī)率寡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來倚搬,“玉大人冶共,你說我怎么就攤上這事。” “怎么了比默?”我有些...
    開封第一講書人閱讀 162,823評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵幻捏,是天一觀的道長盆犁。 經(jīng)常有香客問我命咐,道長,這世上最難降的妖魔是什么谐岁? 我笑而不...
    開封第一講書人閱讀 58,204評(píng)論 1 292
  • 正文 為了忘掉前任醋奠,我火速辦了婚禮,結(jié)果婚禮上伊佃,老公的妹妹穿的比我還像新娘窜司。我一直安慰自己,他們只是感情好航揉,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,228評(píng)論 6 388
  • 文/花漫 我一把揭開白布塞祈。 她就那樣靜靜地躺著,像睡著了一般帅涂。 火紅的嫁衣襯著肌膚如雪议薪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,190評(píng)論 1 299
  • 那天媳友,我揣著相機(jī)與錄音斯议,去河邊找鬼。 笑死醇锚,一個(gè)胖子當(dāng)著我的面吹牛哼御,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播焊唬,決...
    沈念sama閱讀 40,078評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼恋昼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了赶促?” 一聲冷哼從身側(cè)響起焰雕,我...
    開封第一講書人閱讀 38,923評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎芳杏,沒想到半個(gè)月后矩屁,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,334評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡爵赵,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,550評(píng)論 2 333
  • 正文 我和宋清朗相戀三年吝秕,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片空幻。...
    茶點(diǎn)故事閱讀 39,727評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡烁峭,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情约郁,我是刑警寧澤缩挑,帶...
    沈念sama閱讀 35,428評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站鬓梅,受9級(jí)特大地震影響供置,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜绽快,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,022評(píng)論 3 326
  • 文/蒙蒙 一芥丧、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧坊罢,春花似錦续担、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至憾儒,卻和暖如春询兴,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背航夺。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評(píng)論 1 269
  • 我被黑心中介騙來泰國打工蕉朵, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人阳掐。 一個(gè)月前我還...
    沈念sama閱讀 47,734評(píng)論 2 368
  • 正文 我出身青樓始衅,卻偏偏與公主長得像,于是被迫代替她去往敵國和親缭保。 傳聞我的和親對(duì)象是個(gè)殘疾皇子汛闸,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,619評(píng)論 2 354

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

  • 系列文集:爆棧熱門 iOS 問題。目錄在此宗雇。倉薯翻譯钳恕,歡迎指正:) 問題 在定義 property 的時(shí)候别伏,ato...
    戴倉薯閱讀 37,025評(píng)論 32 132
  • 1.項(xiàng)目經(jīng)驗(yàn) 2.基礎(chǔ)問題 3.指南認(rèn)識(shí) 4.解決思路 ios開發(fā)三大塊: 1.Oc基礎(chǔ) 2.CocoaTouch...
    陽光的大男孩兒閱讀 4,984評(píng)論 0 13
  • 1、盤面一覽 周一大盤小幅高開后小幅震蕩片刻后忧额,便在有色板塊和金融板塊的輪番帶動(dòng)下一度快速拉升厘肮,并將指數(shù)維持...
    阿凱古閱讀 421評(píng)論 0 2
  • 等盡拾捌爾夏至——二月紅 這兩天在追《老九門》,講真睦番,被二爺震到了类茂。 一開始耍属,以為他就是盜墓和唱戲的。后來漸漸這個(gè)...
    卿訫閱讀 4,685評(píng)論 2 6
  • 有位管理者的一個(gè)下屬近來幾個(gè)月表現(xiàn)很不好巩检,態(tài)度不積極厚骗,工作質(zhì)量也很差,并且每次溝通都有各種各樣的借口兢哭。在一次的討論...
    江山笑煙雨遙閱讀 999評(píng)論 0 0