2010-07-23 23 views
0

我想問一下關於iPhone的應用和目標C的問題。在實現程序中,有一個名爲'dealloc'的函數,這個函數只能被應用程序調用一次嗎?例如,如果我分配一個對象並保留它2次,保留計數爲2,並且我從不在程序中使用'release',除非在dealloc中。將對象從內存中移除,否則將從內存中移除對象。謝謝。在iPhone中保留count和dealloc

回答

1

在實現程序中,有一個名爲'dealloc'的函數,這個函數只能被應用程序調用一次嗎?

是的。 -dealloc破壞對象。試圖再次發送任何消息,包括-dealloc是錯誤的。

如果我ALLOC一個對象,並保留它的2倍,則保留計數爲2

小心。保留計數爲至少 3.除代碼之外的其他內容可能會保留該對象。最好不要擔心保留數量,只考慮所有權。

每個alloc,new,copy或retain都是所有權的主張。只有當所有權的所有權利都被放棄後,該對象的dealloc方法纔會被調用。通過發送-release來放棄所有權的主張。所以如果你從來沒有發佈過一個對象,除了它自己的dealloc,你永遠不會釋放它。

+0

如果您分配一個對象並保留兩次,則引用計數至少爲** 3 **。它從1開始並增加兩次。 – jasongetsdown 2010-07-23 10:56:06

+0

@jasongetsdown:不錯的地方。謝謝。我修改了我的帖子。 – JeremyP 2010-07-23 12:23:37

1

dealloc當對象被銷燬時(當其引用計數達到0時)被系統調用一次。如果您的班級中存在成員變量您的init功能,則必須在您的dealloc功能中使用release

如果你給別人一個指針,這些成員對象之一,他們retain它的成員都可以在你的dealloc生存的release,而是通過發送retain消息,他們正在採取責任後發送release消息,確保其最終的破壞。

+0

感謝您的回覆。如果我忘記設置發行版,那麼有關程序或對象的一些問題是否會留在內存中?謝謝。 – Questions 2010-07-23 08:29:47

+0

該對象將保留在內存中,這是一個問題。 – jasongetsdown 2010-07-23 10:53:48