內(nèi)存管理

1. 內(nèi)存管理.

 1). 當(dāng)數(shù)據(jù)需要被存儲(chǔ)的時(shí)候,如何存儲(chǔ)到內(nèi)存之中.
聲明1個(gè)變量就可以了.將數(shù)據(jù)往這個(gè)變量中存儲(chǔ)就可以了.
 2). 當(dāng)存儲(chǔ)在內(nèi)存中的數(shù)據(jù)不再需要被使用的時(shí)候,如何被回收.

2. 內(nèi)存中的五大區(qū)域.

 棧:  局部變量. 局部變量所在的作用域被執(zhí)行完畢之后,就會(huì)被系統(tǒng)立即回收.
 堆:  OC對(duì)象以及我們手動(dòng)申請(qǐng)的空間,使用malloc calloc。在堆內(nèi)存中申請(qǐng)的空間.當(dāng)我們不需要使用的時(shí)候.使用free函數(shù)來回收.
 BSS段: 未經(jīng)初始化的全局變量、靜態(tài)變量. 一旦被初始化以后,就會(huì)回收并轉(zhuǎn)存到數(shù)據(jù)段.
 數(shù)據(jù)段: 已經(jīng)初始化的全局變量、靜態(tài)變量、常量數(shù)據(jù). 直到程序結(jié)束的時(shí)候才會(huì)被系統(tǒng)回收.
 代碼段: 代碼數(shù)據(jù).直到程序結(jié)束的時(shí)候才會(huì)被回收.

3. 存儲(chǔ)在在堆中的OC對(duì)象.

 1). 存儲(chǔ)在堆中的OC對(duì)象,是肯定需要被回收的.
 iPhone:
 40M:  發(fā)送1條警告.
 45M:  發(fā)送1條警告.
 120M: 系統(tǒng)直接將程序閃退.

4. 內(nèi)存管理的范圍:

 除開堆以外的空間,他們中存儲(chǔ)的數(shù)據(jù)的回收,不需要程序員去手動(dòng)管理.而是由系統(tǒng)自動(dòng)回收的.
 存儲(chǔ)在堆中的數(shù)據(jù)不再使用的時(shí)候,需要程序員手動(dòng)的回收.否則存儲(chǔ)在堆中的對(duì)象直到程序結(jié)束的時(shí)候才會(huì)回收.
 一旦存儲(chǔ)在堆內(nèi)存中的對(duì)象不再需要被使用的時(shí)候,就應(yīng)該立即回收它.
 所以,我們只需要管存儲(chǔ)在堆中的OC對(duì)象的回收.

5. 對(duì)象什么時(shí)候應(yīng)該被回收?

 當(dāng)對(duì)象不再有人使用的時(shí)候,那么就應(yīng)該回收這個(gè)對(duì)象.
 對(duì)象的擁有者:
 誰(shuí)在使用這個(gè)對(duì)象誰(shuí)就是這個(gè)對(duì)象的擁有者.
 那1個(gè)指針在指向這個(gè)對(duì)象,這個(gè)指針就是這個(gè)對(duì)象的擁有者.
 當(dāng)有人在使用這個(gè)對(duì)象的時(shí)候,這個(gè)對(duì)象不能被回收.
 只有當(dāng)沒有任何人在使用這個(gè)對(duì)象的時(shí)候,這個(gè)對(duì)象才可以被回收.

6. 如何知道對(duì)象有多少個(gè)人在使用它.

 蘋果為每1個(gè)對(duì)象設(shè)計(jì)了1個(gè)屬性,叫做retainCount引用計(jì)數(shù)器.
 unsigned long類型占據(jù)8個(gè)字節(jié).
 這個(gè)屬性的值代表有多少個(gè)人正在使用這個(gè)對(duì)象.
 當(dāng)多1個(gè)人使用這個(gè)對(duì)象的時(shí)候,應(yīng)該先讓這個(gè)對(duì)象的引用計(jì)數(shù)器的值+1 代表多1個(gè)人使用這個(gè)對(duì)象
 當(dāng)少1個(gè)人使用這個(gè)對(duì)象的時(shí)候,應(yīng)該先讓這個(gè)對(duì)象的引用計(jì)數(shù)器的值-1 代表少1個(gè)人使用這個(gè)對(duì)象.
 當(dāng)對(duì)象的引用計(jì)數(shù)器的值為0的時(shí)候,代表這個(gè)對(duì)象無人使用.那么這個(gè)時(shí)候系統(tǒng)就會(huì)立即回收這個(gè)對(duì)象.
 在對(duì)象被系統(tǒng)回收的時(shí)候,會(huì)自動(dòng)的對(duì)象的dealloc方法.

7. 操作對(duì)象的引用計(jì)數(shù)器.

 1). 為對(duì)象發(fā)送1條retain消息.這個(gè)對(duì)象的引用計(jì)數(shù)器就會(huì)加1.
 2). 為對(duì)象發(fā)送1條release消息.這個(gè)對(duì)象的引用計(jì)數(shù)器就會(huì)減1.
 3). 為對(duì)象發(fā)送1條retainCount消息.就可以得到這個(gè)對(duì)象的引用計(jì)數(shù)器的值.
 當(dāng)對(duì)象的引用計(jì)數(shù)器的值變?yōu)?的時(shí)候.系統(tǒng)就會(huì)立即回收這個(gè)對(duì)象.
 我們新創(chuàng)建的1個(gè)對(duì)象,這個(gè)對(duì)象的引用計(jì)數(shù)器的值默認(rèn)是1.

8. 內(nèi)存管理的分類.

MRC:Manual Reference Counting 手動(dòng)引用計(jì)數(shù)
     當(dāng)多1個(gè)人使用對(duì)象的時(shí)候,程序手動(dòng)的的為這個(gè)對(duì)象的引用計(jì)數(shù)+1.
     當(dāng)少1個(gè)人使用對(duì)象的時(shí)候程序員手動(dòng)的為這個(gè)對(duì)象的引用計(jì)數(shù)器-1
     手動(dòng)內(nèi)存管理.
ARC:Automatic Reference Counting 自動(dòng)引用計(jì)數(shù).
     系統(tǒng)自動(dòng)的為對(duì)象發(fā)送retain、release消息.
最后編輯于
?著作權(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),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • 第一章 簡(jiǎn)介 J2SE平臺(tái)的一大優(yōu)勢(shì)是它的自動(dòng)化內(nèi)存管理,避免了開發(fā)者去面對(duì)內(nèi)存管理的復(fù)雜性。 本文以Sun J2...
    tianyiliusha閱讀 1,073評(píng)論 0 1
  • 內(nèi)存管理 簡(jiǎn)述OC中內(nèi)存管理機(jī)制。與retain配對(duì)使用的方法是dealloc還是release,為什么?需要與a...
    丶逐漸閱讀 2,081評(píng)論 1 16
  • 29.理解引用計(jì)數(shù) Objective-C語(yǔ)言使用引用計(jì)數(shù)來管理內(nèi)存,也就是說,每個(gè)對(duì)象都有個(gè)可以遞增或遞減的計(jì)數(shù)...
    Code_Ninja閱讀 1,743評(píng)論 1 3
  • 別人輕而易舉得到的或許需要你花很久時(shí)間付出很多心血才能得到的,然而如果你還不努力,那你能做什么?生活一片虛無。
    劉熙瑤閱讀 153評(píng)論 0 0
  • 陽(yáng)春3月,萬物復(fù)蘇、春暖花開,隨著普利茲克獎(jiǎng)的公布,大眾的目光重新聚焦到建筑師的身上。這周三,我們即將迎來國(guó)際婦女...
    馬良行MAHOOOO閱讀 522評(píng)論 0 1

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