如果對一個對象使用了alloc、[Mutable]copy,retain,那么你必須使用相應的realease或者autorelease
cocoa中的內存管理機制——引用計數
引用計數(reference counting)又稱為保留計數(retain counting),引用計數的數值表示有幾個其它對象在使用它。
每一個對象都擁有一個引用計數
當對象被創建的時候,引用計數的值為1
當發送retain消息的時候,該對象的引用計數加1,該對象的引用計數為2
當這個對象發送release消息的時候,該對象的引用計數減1
當一個對象的引用計數為0時,系統自動調用dealloc方法,銷毀該對象。
子類的某些實例是繼承自父類的,因此,我們需要調用父類的dealloc方法,來釋放父類擁有的這些對象。
一般來說調用的順序是,當子類的對象釋放完時,然后再釋放父類的所擁有的實例,這一點與調用初始化方法,正好相反。
當一個所有者(可以是任何一個OC對象)做了以下某個動作的時候,它就擁有了對一個對象的所有權。
(1)如果創建或者復制某個對象時,則擁有了該對象的所有權,即包含下列關鍵詞時:
alloc,allocWithZone:,copy,copyWithZone:,mutableCopy,mutableCopyWithZone:
(2)如果沒有創建或復制對象,而是保留引用,同樣擁有該對象的使用權
retain
(3)當擁有了某個對象的所有權,在不需要某一個對象時,需要釋放他們,用
release,autoRelease
關于ARC(Auto reference counting)自動引用計數
當你在編譯程序的時候提供自動管理內存的功能,它會自動加入內存的控制代碼,控制對象的生命周期,大大簡化了內存管理的步驟,ARC管理內容的原理就是,編譯器會在適當的地方自動插入retain、release和autorelease消息,但是注意版本,是在ios4及以上(不是很確定)