MRC模式下的內(nèi)存管理機(jī)制


OC的內(nèi)存管理機(jī)制是什么?
答:內(nèi)存管理的機(jī)制:

每個(gè)對(duì)象都有自己的引用計(jì)數(shù)器

在MRC內(nèi)存管理模式下,引用計(jì)數(shù)器計(jì)算機(jī)是無法自動(dòng)操作的。

當(dāng)向?qū)ο蟀l(fā)送alloc、copy、new消息的時(shí)候,該對(duì)象引用計(jì)數(shù)器會(huì)自動(dòng)設(shè)置為1。

向?qū)ο蟀l(fā)送[對(duì)象?? retainCount]獲得該對(duì)象引用計(jì)數(shù)器的值。

當(dāng)不在使用對(duì)象的時(shí)候,會(huì)發(fā)送release消息,通知引用計(jì)數(shù)器”減“1.

當(dāng)一個(gè)對(duì)象的引用計(jì)數(shù)器的值為0時(shí),”系統(tǒng)“會(huì)自動(dòng)銷毀該對(duì)象,并回收該內(nèi)存空間。

當(dāng)對(duì)象銷毀的時(shí)候,會(huì)自動(dòng)發(fā)送dealloc消息。

聲明式屬性中是如何解決內(nèi)存問題的?

答:

默認(rèn)情況下聲明式屬性,并沒有解決內(nèi)存問題

如果需要解決內(nèi)存問題,需要加上(retain)

-(void)setBook:(Book*)book

{

????? if(nil ==_book)

???? {

??????????? _book =book;

??????????? [_book retain];

????? }else{

?????????? [_book release];

?????????? _book = book;

?????????? [_book retain];

????? }

}

-(void) dealloc{

????????? [_book? release];

????????? [super? dealloc];

}

@property (retain) Book* book;

聲明式屬性解決的只有setter問題,加1操作問題

dealloc中減1操作依然需要自己做

如果一個(gè)對(duì)象中的聲明式屬性是對(duì)象類型,加上retain

當(dāng)一個(gè)對(duì)象銷毀的時(shí)候,應(yīng)該將它擁有的屬性對(duì)象全部release(重寫dealloc方法)

getter方法和工廠方法中的內(nèi)存問題是如何解決的?

答:自動(dòng)釋放池可以幫我們自動(dòng)釋放對(duì)象

+(id)EFstudent{

??? EFStudent* stu = [Student alloc] init] autorelease];

???? return stu;

}

-(EFStudent*)student{

????? return?? [[_student? retain] autorelease];

內(nèi)存的管理,是對(duì)堆內(nèi)存的管理(申請(qǐng)和釋放)通過引用計(jì)數(shù)器來管理,當(dāng)引用計(jì)數(shù)器為0時(shí),系統(tǒng)釋放那片內(nèi)存。MRC模式下,內(nèi)存的管理要遵循誰申請(qǐng),誰釋放的原則,即誰把引用計(jì)數(shù)器加1,誰負(fù)責(zé)減1,內(nèi)存管理不當(dāng)?shù)暮蠊?,程序崩潰(使用釋放的?duì)象)和內(nèi)存泄露。

最后編輯于
?著作權(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)容

  • iOS內(nèi)存管理 概述 什么是內(nèi)存管理 應(yīng)用程序內(nèi)存管理是在程序運(yùn)行時(shí)分配內(nèi)存(比如創(chuàng)建一個(gè)對(duì)象,會(huì)增加內(nèi)存占用)與...
    蚊香醬閱讀 5,823評(píng)論 8 119
  • 內(nèi)存管理 簡(jiǎn)述OC中內(nèi)存管理機(jī)制。與retain配對(duì)使用的方法是dealloc還是release,為什么?需要與a...
    丶逐漸閱讀 2,081評(píng)論 1 16
  • 內(nèi)存管理是程序在運(yùn)行時(shí)分配內(nèi)存、使用內(nèi)存,并在程序完成時(shí)釋放內(nèi)存的過程。在Objective-C中,也被看作是在眾...
    蹲瓜閱讀 3,365評(píng)論 1 8
  • 內(nèi)存管理 ARC處理原理 ARC是Objective-C編譯器的特性,而不是運(yùn)行時(shí)特性或者垃圾回收機(jī)制,ARC所做...
    b485c88ab697閱讀 11,348評(píng)論 3 47
  • 堅(jiān)持原創(chuàng)分享第129天 如果一個(gè)成年人忽然想要有一個(gè)管教、約束自己的人,開始我理解為是退行了,退回了小孩兒的狀態(tài),...
    我是一只沒有腳的鳥閱讀 577評(píng)論 0 0

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