2011-08-17 60 views
2

我是iPhone開發新手。在viewDidUnload中發佈有沒有區別?

我在我的應用程序中使用了一些按鈕和標籤。我在dealloc函數中釋放所有這些按鈕和標籤。
我也在viewDidUnload中釋放它們。

- (void)viewDidUnload 
{ 
[super viewDidUnload]; 
self.ans1 = nil; 
self.ans2 = nil; 
self.ans3 = nil; 
self.ans4 = nil; 
self.button = nil; 
self.button2 = nil; 
self.button3 = nil; 
self.button4 = nil; 
} 

我只是想知道它對內存管理有好處,或者對內存管理沒有任何影響。
爲什麼我們使用?

在此先感謝.. !!

回答

3

它不是時viewDidUnload稱爲該被卸載而只是其視圖視圖控制器。 視圖控制器保持活動狀態,直到它被釋放。

在viewDidUnload中,您必須發佈屬於視圖的所有對象以及可以在viewDidLoad中重新創建的所有對象(因爲視圖控制器需要重新創建其視圖時再次調用viewDidLoad)。這包括你所有的網點。您還必須將這些變量設置爲零以避免過度釋放它們。

因爲在dealloc中,您應該釋放視圖控制器保留的所有對象,包括您包含在viewDidUnload中的所有對象。

+0

,如果我使用的UIImageView,NSInteger的,NSArray的和UIScrollView的話,我必須讓他們無以viewDidUnload? – iUser

+0

在一般實踐中,您可以使用dealloc方法完成所有操作,就像您在大多數應用程序中看到的那樣。但關於這個問題,你可以釋放iamgeView,viewDidUnload中的scrollview,然後設置nil。 – PJR

+0

謝謝!但我可以釋放這些對象在ViewDidUnload和dealloc函數?或者它會導致任何內存泄漏? – iUser

1

這對內存管理很有用。如果您在卸載控制器時釋放與View控制器相關的對象,則可以有效減少應用程序的內存佔用量。即使在不使用它們的情況下也可以保留對象,這使得應用程序更容易發生內存警告&最終終止。

因此,在ViewDidUnload版本中分配ViewDidLoad &是一種很好的做法。

HTH,

阿克沙伊

+0

謝謝:)阿克沙伊所以 – iUser

2

viewDidUnload用於釋放視圖創建時可能做出的任何事情 - 這包括viewDidLoad中的所有內容,還包括從xib文件內部創建的IBOutlet屬性。這些應該全部被釋放並且在viewDidUnload中設置爲零。

其他任何東西都應該在dealloc中發佈。

這個想法是,如果調用viewDidUnload來釋放一些內存,視圖可以從您的viewDidLoad方法中再次完全重新創建。

也看到這個問題;

memory management on the iPhone with viewDidUnload

相關問題