2012-04-02 92 views
1

我的根viewController的方法viewWillDisappear, viewWillUnload viewDidUnload永遠不會被調用(每個都有日誌語句)。在這裏看起來像這樣,但答案並不完全清楚。這似乎意味着viewController視圖需要嵌入UINavigationController這看起來很奇怪,而不是我在其他地方看到的東西。viewWillDisappear,viewWillUnload viewDidUnload永遠不會調用

viewWillDisappear and viewDidDisappear never get called

如果是這樣的話,我還有什麼地方可以做一些清理工作,並確保我的UIDocument變化得救?

編輯:猜我誤解@根viewController事件如何工作(它是獨特的狀態等)。將研究AppDelegate方法。只是試圖確保我的UIDocument的東西得到保存,而且我的核心音頻的東西正確關閉。

Close: 結束了AppDelegate發佈的通知。似乎工作得很好+簡單的東西,你做一次後。

從的appDelegate

- (void)applicationDidEnterBackground:(UIApplication *)application 
{ 

[[NSNotificationCenter defaultCenter] postNotificationName: @"handleCleanup" 
                object: nil 
                userInfo: nil]; 
} 

//我的VC的通知登記:

[[NSNotificationCenter defaultCenter] addObserver: self 
             selector: @selector(saveAndCleanup) 
              name: @"handleCleanup" 
              object: nil]; 

回答

3

如果這是你的根視圖,你永遠不會改變它 - 那麼它不會消失。儘管viewWillDisapear可能會在你將應用程序放到後臺時調用,但我不記得了。

如果您收到內存警告,您的視圖控制器將只會被卸載,但如果它在屏幕上 - 它不會被卸載。

viewWillDisappear:

這種方法被稱爲響應於視圖被從視圖層次結構中移除。在實際刪除視圖之前以及配置任何動畫之前調用此方法。

viewDidUnload:

當低內存條件發生並且不需要當前視圖控制器的視圖,該系統可以選擇到從內存中刪除這些看法。這個方法在視圖控制器的視圖被釋放後調用,並且是您執行任何最終清理的機會。如果您的視圖控制器存儲對視圖或其子視圖的單獨引用,則應該使用此方法來釋放這些引用。您也可以使用此方法刪除對您創建的任何對象的引用,以支持該視圖,但現在視圖不再需要時不再需要該對象。您不應該使用此方法來釋放用戶數據或任何其他無法輕易重新創建的信息。

+0

doh!這就說得通了。我正在模擬器中測試,並期待看到這些視圖事件被觸發。看起來像AppDelegate是處理我的清理的正確位置。 – 2012-04-02 14:08:26

0

釋放不必要的緩存或資源的典型地點是- (void)didReceiveMemoryWarning。如果您在此方法中沒有這樣做,iOS可能會選擇在低內存時終止您的應用。

考慮到移動應用的性質,您應該儘可能經常保存。典型的實現使用計時器來發出自動保存。有時會出現一個電話,iOS可能會選擇殺死你的應用程序,而不是把它放到後臺,因爲你使用了大量的內存。

另一方面,當調用- (void)didReceiveMemoryWarning時,可以確定您的視圖將被卸載。但是,這並不意味着應用程序將被殺死。這意味着下次打開應用時,viewDidLoad將再次被調用。從這個意義上講,你可以嘗試用這種方法保存文件。

相關問題