2009-02-23 54 views
24

我正在使用UINavigationController在視圖之間移動。當我在視圖中來回移動時,我的應用使用的內存不斷增加。在把NSLog語句放在所有viewcontrollers的dealloc方法中,我注意到它只被調用了一些viewcontrollers,而不是所有被彈出的。iPhone - 何時dealloc爲一個視圖控制器調用?

例如,這是其中的觀點被推序列MainViewController - > viewcontroller1 - > viewcontroller2 - > viewcontroller3

現在viewcontroller3,如果我做了popToViewController:mainController,dealloc中被稱爲僅供viewcontroller3。它不叫viewcontroller1和2.

有人可以告訴我爲什麼發生這種情況。

發現問題。如果視圖控制器持有的任何引用仍在內存中,則不會調用dealloc方法。在我的情況下,它是沒有在viewcontroller1和viewcontroller2中發佈的MPMoviePlayerController對象。

+0

我遇到完全相同的問題;僅對第三個控制器調用dealloc。你說過:「如果視圖控制器持有的任何引用仍在內存中,dealloc方法不會被調用。」你能詳細解釋一下嗎? – 2011-06-10 02:40:56

+1

視圖控制器是仍在使用的對象的委託。我從代表中刪除它,然後它工作正常。自從另一個對象持有其參考文件(作爲代表) – lostInTransit 2011-06-10 04:07:28

回答

13

這是最後一次,第一次的情況。所以,如果你想象你的第一個視圖控制器是漢堡的底部小圓麪包,然後添加漢堡(第二視圖控制器),然後添加頂部漢堡(第三視圖控制器)。

如果你回到漢堡,你取下頂部發髻(popViewController:調用被彈出的視圖的dealloc方法)。如果你想回到底部發髻,那麼你必須彈出漢堡(每次彈出視圖時調用dealloc)。

不知道爲什麼對流行根第二視圖控制器的dealloc不會被稱爲雖然..

+0

感謝丹以來,沒有得到處理。那令我驚訝的是,dealloc被稱爲某些類而不是其他類。您是否意識到可能發生這種情況? – lostInTransit 2009-02-23 14:58:40

+0

我面臨同樣的問題,我也有兩個viewcontrollers和第二個viewcontroller的dealloc不會從導航堆棧彈出時調用。 – Heena 2013-02-22 06:13:22

0

這裏您導航控制人不存在應需要寫pushviewcontroller後這條線, [viewControllername release]; 然後它會調用每個viewcontroller Dealloc方法:)

0

你還應該記住,dealloc並不總是保證運行。

-1

使用像[self.navigationController popToRootViewControllerAnimated:YES]; 它爲我工作...調用我的10個視圖控制器的所有dealloc方法

相關問題