2011-04-01 12 views
1

我有許多保留的IBOutlets,從XIB加載的視圖。可可 - 快速發佈所有IBOUtlets

我已經讀過,他們必須在控制器的dealloc方法被調用時被釋放。

我可以使用一個循環來做到這一點(還要避免單獨釋放每個插座)?

for(UIView *v in self.view.subviews){ 
[v release]; 
v=nil; 
} 

另外,在那之後,我是否應該釋放視圖?

+0

你有沒有試過你發佈的代碼,它的工作?我建議不要這樣含糊不清,只是明確地發佈你必須發佈的內容,不能有很多。 – mbehan 2011-04-01 16:16:16

+0

我試了一下,我得到了以下錯誤*** - [CALayer發佈]:消息發送到釋放實例0x4c65f10我的擔心是找到一種方法,我可以在每個viewController中使用。 – Lorenzo 2011-04-01 16:18:07

+1

你剛纔回答了你的問題。 – mbehan 2011-04-01 16:23:06

回答

0

這隻有在你確實保留了每一個子視圖時纔有意義,即使這樣看起來像是在尋找麻煩 - 如果你想改變你的.xib,你必須記得更新你的代碼以及。並且在筆尖中也可能存在可以連接到插口的非視圖對象,如視圖控制器。

在iPhone或iPad大小的屏幕上只能看到很多視圖,所以很難想象你有幾十個插座。我認爲這裏要謹慎的做法是簡單地分別釋放每一個。這是iOS開發人員期望看到的,並且不會比使用循環慢。這將是更多的代碼,是的,但代碼會很容易理解。

+0

好吧,所以它必須是'硬編碼'。 – Lorenzo 2011-04-01 16:25:07

+0

在運行時沒有跡象表明給定的實例變量是一個出口。此外,並不要求商店保留其要求。所以,你的代碼真的沒有實際的方法來檢查自己,並決定應該什麼也不應該被釋放。 – Caleb 2011-04-01 16:48:14

0

self.view自動發佈在UIViewController解除分配和子視圖,如果不保留您的代碼。

你應該重新閱讀蘋果文檔的內存管理的章節...;)

0

我寫了像releaseVars函數,該函數的變量地址,釋放他們並設置爲nil。這節省了一些代碼行,但仍然需要手動處理它們。