iOS內(nèi)存管理總結(jié)(ARC/MRC)

MRC原理

MRC: 手動管理內(nèi)存(retain, release, autorelease,不多說) 持有對象,retain+1 ,引用計數(shù)加1, 釋放對象:release -1, 引用計數(shù)減1,當(dāng)引用計數(shù)為0時,會自動釋放內(nèi)存. autorelease對象內(nèi)存的管理放到autoreleasepool中, 當(dāng)pool drain時,回收內(nèi)存. (這是基于 objective-c的運行時特性和垃圾回收機制)

MRC下內(nèi)存管理的缺點:

1嫂易、釋放一個堆內(nèi)存時,首先要確定指向這個堆空間的指針都被release了掐禁。(避免提前釋放)

2怜械、釋放指針指向的堆空間,首先要確定哪些指向同一個堆傅事,這些指針只能釋放一次缕允。(避免釋放多次,造成內(nèi)存泄露)

3蹭越、模塊化操作時灼芭,對象可能被多個模塊創(chuàng)建和使用,不能確定最后由誰釋放
多線程操作時般又,不確定哪個線程最后使用完畢彼绷。

ARC原理

ARC的規(guī)則就是只要對象沒有強指針引用,就會被釋放掉茴迁,換而言之 只要還有一個強引用指針變量指向?qū)ο蠹拿酰敲催@個對象就會存在內(nèi)存中。弱指針指向的對象堕义,會被自動變成空指針(nil指針)猜旬,從而不會引發(fā)野指針錯誤。

ARC有什么好處

引用計數(shù)方式的內(nèi)存管理方式?jīng)]有變倦卖,只是自動地幫我們?nèi)ヌ幚硪糜嫈?shù)strong變量在超出變量作用域時洒擦,會自動釋放其所retain的對象,即自動調(diào)用release(編譯器自動插入release怕膛,用clang看程序匯編輸出可以看出來熟嫩,插入objc_release)

ARC缺點:

1.雖然ARC給我們編程帶來的很多好多,但也可能出現(xiàn)內(nèi)存泄露褐捻。如下面兩種情況:

循環(huán)參照:A有個屬性參照B掸茅,B有個屬性參照A椅邓,如果都是strong參照的話,兩個對象都無法釋放昧狮。

    解決辦法:一段用強引用景馁,一段用弱引用。outlet的控件屬性都是weak修飾逗鸣,因為他們已經(jīng)被父控件強引用合住。

死循環(huán):如果有個ViewController中有無限循環(huán),也會導(dǎo)致即使ViewController對應(yīng)的view消失了撒璧,ViewController也不能釋放聊疲。

2.ARC會造成額外的retain/release,造成不必要的消耗沪悲,正是因為這樣它會比MRC慢一點 不過這些額外的引用計數(shù)暴增了代碼運行的正確性

ARC只對OC對象的進行內(nèi)存管理获洲,對于CoreFundation的api使用,他的對象所有權(quán)沒有移交給OC對象管理殿如,都需要手動去釋放」鄙海現(xiàn)在Xcode支持ARC/MRC混合編碼

<big>一個iOS學(xué)習(xí)路上的小學(xué)僧,歡迎指正!


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末涉馁,一起剝皮案震驚了整個濱河市门岔,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌烤送,老刑警劉巖寒随,帶你破解...
    沈念sama閱讀 222,464評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異帮坚,居然都是意外死亡妻往,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,033評論 3 399
  • 文/潘曉璐 我一進店門试和,熙熙樓的掌柜王于貴愁眉苦臉地迎上來讯泣,“玉大人,你說我怎么就攤上這事阅悍『们” “怎么了?”我有些...
    開封第一講書人閱讀 169,078評論 0 362
  • 文/不壞的土叔 我叫張陵节视,是天一觀的道長拳锚。 經(jīng)常有香客問我,道長寻行,這世上最難降的妖魔是什么霍掺? 我笑而不...
    開封第一講書人閱讀 59,979評論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上抗楔,老公的妹妹穿的比我還像新娘。我一直安慰自己拦坠,他們只是感情好连躏,可當(dāng)我...
    茶點故事閱讀 69,001評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著贞滨,像睡著了一般入热。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上晓铆,一...
    開封第一講書人閱讀 52,584評論 1 312
  • 那天勺良,我揣著相機與錄音,去河邊找鬼骄噪。 笑死尚困,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的链蕊。 我是一名探鬼主播事甜,決...
    沈念sama閱讀 41,085評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼滔韵!你這毒婦竟也來了逻谦?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,023評論 0 277
  • 序言:老撾萬榮一對情侶失蹤陪蜻,失蹤者是張志新(化名)和其女友劉穎邦马,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體宴卖,經(jīng)...
    沈念sama閱讀 46,555評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡滋将,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,626評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了症昏。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片耕渴。...
    茶點故事閱讀 40,769評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖齿兔,靈堂內(nèi)的尸體忽然破棺而出橱脸,到底是詐尸還是另有隱情,我是刑警寧澤分苇,帶...
    沈念sama閱讀 36,439評論 5 351
  • 正文 年R本政府宣布添诉,位于F島的核電站,受9級特大地震影響医寿,放射性物質(zhì)發(fā)生泄漏栏赴。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,115評論 3 335
  • 文/蒙蒙 一靖秩、第九天 我趴在偏房一處隱蔽的房頂上張望须眷。 院中可真熱鬧竖瘾,春花似錦、人聲如沸花颗。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,601評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽扩劝。三九已至庸论,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間棒呛,已是汗流浹背聂示。 一陣腳步聲響...
    開封第一講書人閱讀 33,702評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留簇秒,地道東北人鱼喉。 一個月前我還...
    沈念sama閱讀 49,191評論 3 378
  • 正文 我出身青樓,卻偏偏與公主長得像趋观,于是被迫代替她去往敵國和親蒲凶。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,781評論 2 361

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

  • iOS內(nèi)存管理 概述 什么是內(nèi)存管理 應(yīng)用程序內(nèi)存管理是在程序運行時分配內(nèi)存(比如創(chuàng)建一個對象,會增加內(nèi)存占用)與...
    蚊香醬閱讀 5,730評論 8 119
  • Cocoa內(nèi)存管理機制 (1)當(dāng)你使用new拆内、alloc旋圆、copy方法創(chuàng)建一個對象時,該對象的保留計數(shù)器值為1.當(dāng)...
    John_LS閱讀 2,780評論 0 6
  • 內(nèi)存管理 ARC處理原理 ARC是Objective-C編譯器的特性麸恍,而不是運行時特性或者垃圾回收機制灵巧,ARC所做...
    b485c88ab697閱讀 11,217評論 3 47
  • 內(nèi)存管理 簡述OC中內(nèi)存管理機制。與retain配對使用的方法是dealloc還是release抹沪,為什么刻肄?需要與a...
    丶逐漸閱讀 1,971評論 1 16
  • 10月29日 所有的一切都是為了修行自己,你給別人錢是為了練習(xí)你心中的大度融欧,跟別人無關(guān)敏弃,反...
    如水的日記閱讀 222評論 1 1