iOS ARC機制要點

第一點:是什么余指?

  • ARC 翻譯過來就是自動引用計數(shù),是幫助我們做對象內(nèi)存管理的一套機制碉碉,使得我們在 MRC 模式下管理內(nèi)存的工作量得到緩解笋婿。
  • ARC 是編譯時特性,相當(dāng)于編譯器幫我們插入了內(nèi)存管理代碼足丢,因此并沒有改變 Objective-C 使用引用計數(shù)管理內(nèi)存的本質(zhì)斩跌。

第二點:有什么捞慌?

__strong 修飾符
  • 表示強引用,對應(yīng)類屬性的 strong 修飾符袖订。
  • 強引用會讓對象引用計數(shù)加一。
  • 在聲明引用時不添加修飾符上沐,那么默認(rèn)就是采用 __strong 修飾楞艾。
  • 修飾的變量會自動初始化為 nil。
    NSString *str; // 兩種方法效果是一樣的
    NSString *str = nil;
__weak 修飾符
  • 表示弱引用蕴侧,對應(yīng)類屬性的 weak 修飾符两入。
  • 弱引用不會對對象做任何操作。
  • 對象被釋放時塘娶,弱引用指針會被置為 nil痊夭,從而避免野指針錯誤的發(fā)生。
  • 經(jīng)常用來解決循環(huán)引用問題虹曙。
  • 只用于 iOS5 及以上版本番舆,iOS5 以下使用 __unsafe_unretained 修飾符來替代。
  • 修飾的變量會自動初始化為 nil疏哗。
__autoreleasing 修飾符
  • 表示把對象注冊到 Autorelease Pool 中禾怠,沒有對應(yīng)類屬性修飾符。
  • 作用就是延遲對象的釋放時機芽偏,在 Autorelease Pool 銷毀時被釋放弦讽。
  • 和 MRC 特性下的 autorelease 的作用相同。
  • 修飾的變量會自動初始化為 nil被碗。
__unsafe_unretaied 修飾符
  • 表示不安全引用,對應(yīng)類屬性的 unsafe_unretained 修飾符缩抡。
  • 修飾的指針只是純粹地指向?qū)ο蟀洌趯ο蟊会尫藕蟪闪艘爸羔樏浣溃浅2话踩?/li>

第三點:怎么做滴肿?

  • 母雞。

第四點:補充點贵少?

Core Foundation 與 Objective-C 類型轉(zhuǎn)換
__bridge 修飾符
CFStringRef s1 = (__bridge CFStringRef)[[NSString alloc] initWithFormat:@"Hello, %@!", @"Kobe"];
// 你不需要用 CFRelease() 去釋放 s1堆缘。
  • __bridge 只是做了 NSString 到 CFStringRef 的轉(zhuǎn)化,內(nèi)存管理規(guī)則未變录平,所以你不需要調(diào)用 CFRelease() 去釋放 s1缀皱。
__bridge_retained 修飾符
NSString *s1 = [[NSString alloc] initWithFormat:@"Hello, %@!", @"Kobe"];
CFStringRef s2 = (__bridge_retained CFStringRef)s1;
// or CFStringRef s2 = (CFStringRef)CFBridgingRetain(s1);
// do something with s2
//...
CFRelease(s2); // 注意要在使用結(jié)束后加這個
  • 表示將指針類型轉(zhuǎn)變的同時,將內(nèi)存管理的責(zé)任由 ARC 轉(zhuǎn)變?yōu)?MRC表箭。
  • 這時我們需要手動的來管理 s2 的內(nèi)存钮莲,而對于 s1,我們即使將其置為 nil伯襟,也不能釋放內(nèi)存握童。
__bridge_transfer 修飾符
CFStringRef result = CFURLCreateStringByAddingPercentEscapes(. . .);
NSString *s = (__bridge_transfer NSString *)result;
//or NSString *s = (NSString *)CFBridgingRelease(result);
return s;
  • 表示將指針類型轉(zhuǎn)變的同時,將內(nèi)存管理的責(zé)任由 MRC 轉(zhuǎn)變?yōu)?ARC俺附。
  • 這里我們將 result 交給了 ARC 來處理,因此就不需要再顯式地調(diào)用 CFRelease() 去釋放 s事镣。
關(guān)于 Autorelease Pool
  • 在沒有手加 Autorelease Pool 的情況下璃哟,Autorelease 對象是在當(dāng)前的 runloop 迭代結(jié)束時釋放的喊递,而它能夠釋放的原因是系統(tǒng)在每個 runloop 迭代中都加入了自動釋放池 Push 和 Pop。

  • 實驗時注意:
    1骚勘,蘋果 在64位系統(tǒng)中,數(shù)據(jù)類型對象和字符串可能被存儲到變量中俏讹。
    2,ARC下户矢,可以用 __autoreleasing 修飾符把對象注冊到自動釋放池殉疼。
    3,ARC下驱证,可以用 valueForKeyPath:@"retainCount" 查看引用計數(shù)恋腕。

參考:

iOS開發(fā)ARC內(nèi)存管理技術(shù)要點
黑幕背后的Autorelease
Objective-C Autorelease Pool 的實現(xiàn)原理
Transitioning to ARC Release Notes

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末荠藤,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子吻育,更是在濱河造成了極大的恐慌淤井,老刑警劉巖摊趾,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件砾层,死亡現(xiàn)場離奇詭異肛炮,居然都是意外死亡宝踪,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進店門粟害,熙熙樓的掌柜王于貴愁眉苦臉地迎上來颤芬,“玉大人套鹅,你說我怎么就攤上這事×饽В” “怎么了吟孙?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長藻治。 經(jīng)常有香客問我巷挥,道長,這世上最難降的妖魔是什么倍宾? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮钩乍,結(jié)果婚禮上怔锌,老公的妹妹穿的比我還像新娘变过。我一直安慰自己牵啦,他們只是感情好妄痪,可當(dāng)我...
    茶點故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著衫生,像睡著了一般。 火紅的嫁衣襯著肌膚如雪彭羹。 梳的紋絲不亂的頭發(fā)上泪酱,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天,我揣著相機與錄音毡惜,去河邊找鬼斯撮。 笑死,一個胖子當(dāng)著我的面吹牛帕膜,可吹牛的內(nèi)容都是我干的溢十。 我是一名探鬼主播,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼张弛,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了种蝶?” 一聲冷哼從身側(cè)響起瞒大,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤透敌,失蹤者是張志新(化名)和其女友劉穎踢械,沒想到半個月后魄藕,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡话瞧,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年交排,在試婚紗的時候發(fā)現(xiàn)自己被綠了饵筑。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡架专,死狀恐怖玄帕,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情桨仿,我是刑警寧澤案狠,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布骂铁,位于F島的核電站,受9級特大地震影響拉庵,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜钞支,卻給世界環(huán)境...
    茶點故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一烁挟、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧撼嗓,春花似錦欢唾、人聲如沸粉捻。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽树酪。三九已至,卻和暖如春续语,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背滥朱。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工徙邻, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人缰犁。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓帅容,卻偏偏與公主長得像伍伤,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子扰魂,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,979評論 2 355

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