OC內(nèi)存管理的黃金法則

如果對一個對象使用了alloc、[Mutable]copy,retain,那么你必須使用相應(yīng)的realease或者autorelease

cocoa中的內(nèi)存管理機(jī)制——引用計數(shù)

引用計數(shù)(reference counting)又稱為保留計數(shù)(retain counting),引用計數(shù)的數(shù)值表示有幾個其它對象在使用它。

每一個對象都擁有一個引用計數(shù)

當(dāng)對象被創(chuàng)建的時候,引用計數(shù)的值為1

當(dāng)發(fā)送retain消息的時候,該對象的引用計數(shù)加1,該對象的引用計數(shù)為2

當(dāng)這個對象發(fā)送release消息的時候,該對象的引用計數(shù)減1

當(dāng)一個對象的引用計數(shù)為0時,系統(tǒng)自動調(diào)用dealloc方法,銷毀該對象。

子類的某些實(shí)例是繼承自父類的,因此,我們需要調(diào)用父類的dealloc方法,來釋放父類擁有的這些對象。

一般來說調(diào)用的順序是,當(dāng)子類的對象釋放完時,然后再釋放父類的所擁有的實(shí)例,這一點(diǎn)與調(diào)用初始化方法,正好相反。

當(dāng)一個所有者(可以是任何一個OC對象)做了以下某個動作的時候,它就擁有了對一個對象的所有權(quán)。

(1)如果創(chuàng)建或者復(fù)制某個對象時,則擁有了該對象的所有權(quán),即包含下列關(guān)鍵詞時:

alloc,allocWithZone:,copy,copyWithZone:,mutableCopy,mutableCopyWithZone:

(2)如果沒有創(chuàng)建或復(fù)制對象,而是保留引用,同樣擁有該對象的使用權(quán)

retain

(3)當(dāng)擁有了某個對象的所有權(quán),在不需要某一個對象時,需要釋放他們,用

release,autoRelease

關(guān)于ARC(Auto reference counting)自動引用計數(shù)

當(dāng)你在編譯程序的時候提供自動管理內(nèi)存的功能,它會自動加入內(nèi)存的控制代碼,控制對象的生命周期,大大簡化了內(nèi)存管理的步驟,ARC管理內(nèi)容的原理就是,編譯器會在適當(dāng)?shù)牡胤阶詣硬迦雛etain、release和autorelease消息,但是注意版本,是在ios4及以上(不是很確定)

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

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

  • 內(nèi)存管理 簡述OC中內(nèi)存管理機(jī)制。與retain配對使用的方法是dealloc還是release,為什么?需要與a...
    丶逐漸閱讀 2,080評論 1 16
  • iOS內(nèi)存管理 概述 什么是內(nèi)存管理 應(yīng)用程序內(nèi)存管理是在程序運(yùn)行時分配內(nèi)存(比如創(chuàng)建一個對象,會增加內(nèi)存占用)與...
    蚊香醬閱讀 5,807評論 8 119
  • 導(dǎo)讀 一、為什么要進(jìn)行內(nèi)存管理 二、內(nèi)存管理機(jī)制 三、內(nèi)存管理原則 四、MRC手動內(nèi)存管理 五、ARC自動內(nèi)存管理...
    千山小畻閱讀 2,269評論 0 7
  • 內(nèi)存管理是程序在運(yùn)行時分配內(nèi)存、使用內(nèi)存,并在程序完成時釋放內(nèi)存的過程。在Objective-C中,也被看作是在眾...
    蹲瓜閱讀 3,360評論 1 8
  • 藥瓶里并沒有任何美麗的色彩 然而我夜夜獨(dú)自撫摸著它 渴望里面裝的是忘情水 手機(jī)里的照片都被掠奪 幸存的簡訊被我一條...
    Spancer_Wu閱讀 266評論 0 0

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