2014-10-27 22 views
2

我有些清理,需要在共享資源的任何時間我的視圖控制器之一進行辭退/彈出/卸載?這可以是當用戶點擊該單獨屏幕上的後退按鈕或者如果對popToRootViewController進行調用(在這種情況下,我理想地能夠清除每個被彈出的控制器)。你可以檢測何時UIViewController已被解散或彈出?

明顯的選擇將在viewDidUnload中這樣做,但當然,這不是卸載的工作方式。有沒有辦法將所有情況都捕獲到ViewController從堆棧中移除的位置?

編輯:忘了提,我做這個使用Xamarin,這樣可能會或可能不會影響到答案。

+0

此共享資源創建的地點/時間?需要做什麼樣的清理?而確實,當在應用程序中的任何視圖控制器駁回做這方面的需求,或者只在特定視圖控制器類的實例後果? – rmaddy 2014-10-27 18:53:29

+0

@rmaddy:在加載資源添加到ViewController。清理是資源上內部方法的一部分,它執行多個我不清楚的事情,但它應該被調用。它需要被稱爲每個單獨的控制器被解僱。如果我回到屏幕上,該屏幕將需要調用該方法對資源的引用。如果我有4個屏幕深度並且調用popToRootViewController,那麼彈出的3個屏幕都需要調用該方法。 – cain 2014-10-27 19:04:03

+0

然後'dealloc',由@SteveMadsen提到的,可能是最好的地方。 – rmaddy 2014-10-27 19:06:38

回答

6
override func viewDidDisappear(animated: Bool) { 
    if (self.isBeingDismissed() || self.isMovingFromParentViewController()) { 
     // clean up code here 
    } 
} 
+0

儘管這是推薦的方法(由Apple),但在我的代碼中,當調用dismissViewController時它不起作用。也許這是因爲我使用自定義解僱過渡。 – SoftDesigner 2016-11-03 15:32:26

-3
-(void) viewDidDisappear:(BOOL)animated{ 

} 
3

-dealloc可能是您最好的選擇。視圖控制器在從堆棧彈出時將被解除分配,除非您將它保留在別處。

viewWillDisappear:viewDidDisappear:都不是好的選擇,因爲他們被稱爲視圖控制器不再顯示,當推棧上別的東西(所以它成爲第二從最頂部),包括任何時間。

viewDidUnload不再使用。系統框架從iOS 6起停止調用此方法。

相關問題