IOS項(xiàng)目中nonatomic和atomic分析

nonatomic:不安全
atomic:加鎖+耗性能
只知道這兩個(gè)特點(diǎn)是不夠的,下面根據(jù)代碼分析原因。

//有兩個(gè)屬性张漂,分別設(shè)置為nonatomic和atomic
#import <UIKit/UIKit.h>

@interface ViewController : UIViewController

@property (nonatomic, strong) NSString *name;
@property (atomic, assign) int number;

@end
一晴玖、 10000個(gè)異步任務(wù)读存,修改name屬性的值
- (void)nonatomic{
    for (NSInteger i = 0; i < 10000; i++) {
        dispatch_async(dispatch_get_global_queue(0, 0), ^{
            self.name = [NSString stringWithFormat:@"name:%ld", i];
        });
    }
}

執(zhí)行結(jié)果:崩潰,崩潰原因是在子線程Thread8上呕屎,對(duì)象釋放了让簿。

image.png

結(jié)果分析:
1、在MRC模式下秀睛,屬性name的set方法如下:

-(void)setName:(NSString *)name{
    if (_name != name) {
        [_name release];
        [name retain];
        _name = name;
    }
}

2尔当、雖然在ARC模式下不用寫其set方法,但是在底層還是會(huì)走到這里
3蹂安、因?yàn)槭嵌嗑€程椭迎,且沒有加鎖保護(hù),所以在一個(gè)線程走到[_name release]后田盈,可能在另一個(gè)線程又一次去釋放畜号,這時(shí)候造成崩潰。
4允瞧、把name屬性的nonatomic改成atomic就不會(huì)崩潰了简软,因?yàn)閍tomic加鎖了蛮拔,是安全的。

二替饿、接著上步說用atomic就安全了语泽,再進(jìn)一步分析

number屬性使用atomic修飾的

- (void)atomic{
    _number = 0;
    dispatch_apply(10000, dispatch_get_global_queue(0, 0), ^(size_t index) {
        self->_number ++;
    });
    NSLog(@"_number:%d", _number);
}

執(zhí)行結(jié)果:執(zhí)行結(jié)果并不是10000,而且每次運(yùn)行結(jié)果都不一樣视卢,即運(yùn)行結(jié)果不可預(yù)見踱卵。

image.png

結(jié)果分析:

_number++等價(jià)于
 int temp = _number+1;
 _number = temp;

雖然atomic保證了number屬性線程安全了,但是并不能保證temp變量的線程安全据过,又因?yàn)槭嵌嗑€程的惋砂,所以有可能同時(shí)執(zhí)行多次 int temp = _number+1;才執(zhí)行一次 _number = temp;導(dǎo)致結(jié)果每次都不同,而且結(jié)果不可預(yù)知绳锅。

這時(shí)候就可以知道為什么不用atomic了:因?yàn)閍tomic會(huì)耗性能西饵,而且大部分情況下并不會(huì)保證線程安全。

什么時(shí)候可以用atomic呢:在最簡單的鳞芙,只有一個(gè)set時(shí)眷柔,簡單的讀寫實(shí)例變量。

UIKIT不需要使用atomic:因?yàn)閁IKIT是在主線程做的原朝,不存在線程安全問題驯嘱。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市喳坠,隨后出現(xiàn)的幾起案子鞠评,更是在濱河造成了極大的恐慌,老刑警劉巖壕鹉,帶你破解...
    沈念sama閱讀 218,755評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件剃幌,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡晾浴,警方通過查閱死者的電腦和手機(jī)负乡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來脊凰,“玉大人敬鬓,你說我怎么就攤上這事◇细鳎” “怎么了?”我有些...
    開封第一講書人閱讀 165,138評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵础芍,是天一觀的道長杈抢。 經(jīng)常有香客問我,道長仑性,這世上最難降的妖魔是什么惶楼? 我笑而不...
    開封第一講書人閱讀 58,791評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上歼捐,老公的妹妹穿的比我還像新娘何陆。我一直安慰自己,他們只是感情好豹储,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評(píng)論 6 392
  • 文/花漫 我一把揭開白布贷盲。 她就那樣靜靜地躺著,像睡著了一般剥扣。 火紅的嫁衣襯著肌膚如雪巩剖。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,631評(píng)論 1 305
  • 那天钠怯,我揣著相機(jī)與錄音佳魔,去河邊找鬼。 笑死晦炊,一個(gè)胖子當(dāng)著我的面吹牛鞠鲜,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播断国,決...
    沈念sama閱讀 40,362評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼贤姆,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了并思?” 一聲冷哼從身側(cè)響起庐氮,我...
    開封第一講書人閱讀 39,264評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎宋彼,沒想到半個(gè)月后弄砍,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,724評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡输涕,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年音婶,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片莱坎。...
    茶點(diǎn)故事閱讀 40,040評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡衣式,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出檐什,到底是詐尸還是另有隱情碴卧,我是刑警寧澤,帶...
    沈念sama閱讀 35,742評(píng)論 5 346
  • 正文 年R本政府宣布乃正,位于F島的核電站住册,受9級(jí)特大地震影響慢叨,放射性物質(zhì)發(fā)生泄漏寻定。R本人自食惡果不足惜讯私,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望晕翠。 院中可真熱鬧嘹朗,春花似錦截酷、人聲如沸势篡。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽岸晦。三九已至,卻和暖如春帅掘,著一層夾襖步出監(jiān)牢的瞬間委煤,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評(píng)論 1 270
  • 我被黑心中介騙來泰國打工修档, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留碧绞,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,247評(píng)論 3 371
  • 正文 我出身青樓吱窝,卻偏偏與公主長得像讥邻,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子院峡,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評(píng)論 2 355

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

  • 1.ios高性能編程 (1).內(nèi)層 最小的內(nèi)層平均值和峰值(2).耗電量 高效的算法和數(shù)據(jù)結(jié)構(gòu)(3).初始化時(shí)...
    歐辰_OSR閱讀 29,392評(píng)論 8 265
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理兴使,服務(wù)發(fā)現(xiàn),斷路器照激,智...
    卡卡羅2017閱讀 134,659評(píng)論 18 139
  • 繼上篇 在家抖腿不停的BGM之后(點(diǎn)擊藍(lán)字可進(jìn)入文章) 曉幸又來推薦咯7⑵恰!俩垃!運(yùn)動(dòng)不孤單励幼,我有我的BGM。 運(yùn)動(dòng)達(dá)人...
    DearJessie閱讀 852評(píng)論 3 4
  • ------JAVA20160710------1口柳、實(shí)際的數(shù)組對(duì)象存儲(chǔ)在堆內(nèi)存中苹粟,如果引用該數(shù)組對(duì)象的數(shù)組引用變量...
    2016AF閱讀 244評(píng)論 2 0
  • 文/蕭讓 (1) 死過之后的人,才會(huì)真正懂得生命的意義跃闹! 蘇雨軒和歷元生是好朋友嵌削,他們像往常一樣去新華書店看書,來...
    蕭讓聽雪閱讀 267評(píng)論 0 4