2012-09-20 37 views
21

我剛剛安裝了新版本的Xcode/ios6。 viewDidUnload現在已折舊。viewDidUnload不再在ios6中調用

在蘋果文檔,

viewDidUnload [...]棄用iOS中6.0。視圖不再在低內存條件下清除,因此此方法從不被調用。

但應用程序的數量都採用這種回調來釋放自己的屬性,如:

- (void)viewDidUnload { 
    [super viewDidUnload]; 

    self.recipientButton = nil; 
    self.connectButton = nil; 
    self.infoLabel = nil; 
} 

這是釋放你的IBOutlets的最佳實踐。

所以,第一個問題:
這是怎麼回事在iOS 6中發生的這些現有的應用程序嗎?他們會泄漏嗎?

和第二個:
什麼是釋放一個IBOutlet屬性的新推薦的方式?在dealloc方法中?

回答

22

對於第一個問題:

您的視圖控制器將獲得didReceiveMemoryWarning方法回調,您可以零出此方法中的觀點&其他組件

做參考檢查WWDC 2012的視頻會議上演化視圖控制器,如果你沒有(我相信他們只適用於註冊開發人員,但不知道)。

回答你的第二個問題。

[object release];在dealloc中。在釋放之前,不需要爲對象分配nil。

+0

感謝您的回答。事實上,我對第一個問題更感興趣。但正如http://stackoverflow.com/a/9281416/127493所說(例如,有其他主題),IBOutlet屬性應在以前的最佳實踐中在viewDidUnload中發佈。 – Martin

+0

@martin請檢查已編輯的答案 –

+0

當然,只有在您不*運行ARC的情況下,'dealloc'中的[object release];'纔有可能。 – 2012-10-10 13:52:52

9

我建議你使用弱屬性爲IBOutlets像

@property (weak) IBOutlet UILabel * labelText; 

這樣,你不需要在dealloc中做任何事情。在iOS 6中,只有ViewDidUnload不會調用,iOS5或更早的版本只會在內存警告發生時調用。

1

和第二個:什麼是推薦的新方法來釋放IBOutlet 屬性?在dealloc方法中?

什麼是「舊」推薦的方式?您必須始終在dealloc中釋放保留的實例變量;它一直是這樣,並繼續這樣。

這只是在viewDidUnload(這只是要求低內存),你可以設置你的屬性爲nil

相關問題