2009-11-05 32 views
6

我在想,release和dealloc有什麼不同?閱讀後,內存管理規則(見下文),我想大多數時候我會使用release。但是,我想知道如何處理屬性。iPhone SDK:Dealloc vs. Release?

@property(保留)....

我一直在使用的dealloc但讀完這篇文章後,我不知道這是正確的。

如果您使用名稱以「alloc」或「new」開頭或包含「copy」(例如alloc,newObject或mutableCopy)的方法創建對象,或者將它發送給對象保留消息。您有責任放棄使用發行版或自動發行版所擁有的對象的所有權。任何其他時間你收到一個對象,你不能釋放它。

回答

21

除了super之外,您不應該致電dealloc

您唯一會打電話給dealloc的是自定義繼承對象的dealloc方法,它將是[super dealloc]

當對象的保留計數降爲零時,將自動調用dealloc,因此爲了正確管理內存,需要在適當時調用retainrelease

如果您對此不清楚,或者想要了解可可內存如何管理的詳細信息,則應該閱讀Memory Management Programing Guide

+0

謝謝你的解釋。 –

+1

謝天謝地ARC出來了! –

5

您從不直接撥打dealloc。它是由系統調用時的對象retainCount變爲0每次你做一個保留,在retainCount遞增與1你做一個釋放每一次,它就會遞減。這樣一來,通過平衡你的保留發佈,可以確保比當retainCount到達0,的dealloc將自動被調用,和你的對象釋放。

正如本的著名,唯一的時間和地點,你會打電話的dealloc是在繼承對象的的dealloc方法。

0

當您使用@property(retain)然後@synthesize來生成屬性代碼時,您不需要對屬性執行任何手動內存管理。其他答案是正確的,你不應該使用dealloc,除非你自己重寫父類dealloc