ios內(nèi)存管理機(jī)制2016

1.說一說對(duì)內(nèi)存管理的理解?(原理)
iOS內(nèi)存管理機(jī)制的原理是引用計(jì)數(shù),引用計(jì)數(shù)簡單來說就是統(tǒng)計(jì)一塊內(nèi)存的所有權(quán),當(dāng)這塊內(nèi)存被創(chuàng)建出來的時(shí)候,它的引用計(jì)數(shù)從0增加到1,表示有一個(gè)對(duì)象或指針持有這塊內(nèi)存,擁有這塊內(nèi)存的所有權(quán),如果這時(shí)候有另外一個(gè)對(duì)象或指針指向這塊內(nèi)存,那么為了表示這個(gè)后來的對(duì)象或指針對(duì)這塊內(nèi)存的所有權(quán),引用計(jì)數(shù)加1變?yōu)?,之后若有一個(gè)對(duì)象或指針不再指向這塊內(nèi)存時(shí),引用計(jì)數(shù)減1,表示這個(gè)對(duì)象或指針不再擁有這塊內(nèi)存的所有權(quán),當(dāng)一塊內(nèi)存的引用計(jì)數(shù)變?yōu)?,表示沒有任何對(duì)象或指針持有這塊內(nèi)存,系統(tǒng)便會(huì)立刻釋放掉這塊內(nèi)存。
其中在開發(fā)時(shí)引用計(jì)數(shù)又分為ARC(自動(dòng)內(nèi)存管理)和MRC(手動(dòng)內(nèi)存管理)。ARC的本質(zhì)其實(shí)就是MRC,只不過是系統(tǒng)幫助開發(fā)者管理已創(chuàng)建的對(duì)象或內(nèi)存空間,自動(dòng)在系統(tǒng)認(rèn)為合適的時(shí)間和地點(diǎn)釋放掉已經(jīng)失去作用的內(nèi)存空間,原理是一樣的。雖然ARC操作起來很方便,不但減少了代碼量,而且降低了內(nèi)存出錯(cuò)的概率,但因?yàn)锳RC不一定會(huì)及時(shí)釋放,所以程序有時(shí)候可能會(huì)占用內(nèi)存較大。而MRC若做得好,通過手動(dòng)管理,及時(shí)釋放掉不需要的內(nèi)存空間,便可保證程序長時(shí)間運(yùn)行在良好狀態(tài)上。

2.內(nèi)存管理的原則?
誰創(chuàng)建,誰釋放,誰+1,誰-1

3.為什么需要內(nèi)存管理?
內(nèi)存管理的兩大問題:內(nèi)存泄露(沒有釋放)和野指針(沒有使用或者置空)

4.autoreleasePool和autorelease的作用?
AutoreleasePool(自動(dòng)釋放池)是OC中的一種內(nèi)存自動(dòng)回收機(jī)制,它可以延遲加入AutoreleasePool中的變量release的時(shí)機(jī)。在正常情況下,創(chuàng)建的變量會(huì)在超出其作用域的時(shí)候release,但是如果將變量加入AutoreleasePool,那么release將延遲執(zhí)行。
看到這里有人可能會(huì)問,那到底延遲到什么時(shí)候執(zhí)行呢?看完本文后,各位心中自然會(huì)有答案。
autorelease可以將變量加入autoreleasePool

5.MRC中符合內(nèi)存管理的set方法的書寫
(舊值release,新值retain,賦值)
if (car != _car) {
// 對(duì)當(dāng)前正在使用的變量)做一次release
[_car release];
// 對(duì)新車做一次retain,賦值
_car = [car retain];
}

6.屬性修飾符
7.什么時(shí)候使用autorelease?與release的區(qū)別
以下三種情況需要使用autorelease
a.寫基于命令行的的程序時(shí),就是沒有UI框架,如AppKit等Cocoa框架時(shí)。
b.寫循環(huán),循環(huán)里面包含了大量臨時(shí)創(chuàng)建的對(duì)象。
c.創(chuàng)建了新的線程。(非Cocoa程序創(chuàng)建線程時(shí)才需要)

release會(huì)釋放掉該對(duì)象
autorelease會(huì)將對(duì)象加入到autoreleasePool中,延遲釋放。

8.什么是自動(dòng)釋放池?
9.什么是ARC?MRC?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 內(nèi)存管理的基本范圍和概念. 程序運(yùn)行過程中藥創(chuàng)建大量的對(duì)象, 和其他高級(jí)語言類似,在ObjC中對(duì)象存儲(chǔ)在堆區(qū),程序...
    ValienZh閱讀 964評(píng)論 0 2
  • 內(nèi)存管理 簡述OC中內(nèi)存管理機(jī)制。與retain配對(duì)使用的方法是dealloc還是release,為什么?需要與a...
    丶逐漸閱讀 2,081評(píng)論 1 16
  • 今天看到一篇不錯(cuò)的文章關(guān)于OC內(nèi)存管理的,轉(zhuǎn)載一下與你共享概述我們知道在程序運(yùn)行過程中要?jiǎng)?chuàng)建大量的對(duì)象,和其他高級(jí)...
    niceSYT閱讀 517評(píng)論 0 2
  • 導(dǎo)讀 一、為什么要進(jìn)行內(nèi)存管理 二、內(nèi)存管理機(jī)制 三、內(nèi)存管理原則 四、MRC手動(dòng)內(nèi)存管理 五、ARC自動(dòng)內(nèi)存管理...
    千山小畻閱讀 2,290評(píng)論 0 7
  • 在這座有著三千年歷史的古城,那些古老的建筑依然保存完好。雖然偶爾也會(huì)有些游人,在它們本就脆弱的墻壁上刻下一組又一組...
    Winmain_Yao閱讀 270評(píng)論 0 1

友情鏈接更多精彩內(nèi)容