如果對一個對象使用了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及以上(不是很確定)