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ù)。