2010-07-14 69 views
1

我曾經爲iPhone像這樣聲明IBOutlets,可可觸摸 - 取消分配IBOutlets

IBOutlet UILabel *myLabel 

我剛剛發現,宣佈他們的正確方法是什麼樣子,

UILabel *myLabel; 
@property(nonatomic,retain) IBOutlet UILabel *myLabel; 

但與第二並且正確的方法是否必須釋放-(void)dealloc方法中的每個IBOutlet以避免內存泄漏?

回答

3

總之,他們應該被釋放任何方式。在第二種方法中,您所做的只是創建一個getter/setter對,它在適當的時候不處理重新分配。它有一些邏輯知道什麼時候在一個對象被替換時正確釋放,但是它不能在那裏做最後的清理,因爲setter仍然以這種方式分配一個新對象。

這樣看待:您必須釋放您專門分配的對象。如果您的代理商通過代碼的過程或通過NIB文件中的實例化數據分配了一個對象,則在某個時刻您負責清理它(除非它來自自動釋放便利方法)。

+0

謝謝!非常有幫助 – user377419 2010-07-14 10:39:26

+0

很高興我能幫到你。我想在上面的答案中糾正一個小問題:當setter被用來替換(或者只是設置)一個值(self.myLabel = newLabel)時,它實際上並沒有像我說的那樣分配一個新的對象。它增加了newLabel的保留能力(因爲你的屬性聲明中有'retain'部分),所以你必須在dealloc中執行一個版本。 – 2010-07-14 16:07:14