如果當前可見的視圖控制器(superview!= nil)被卸載時,我完全混淆瞭如何處理內存警告。該設置是一個tabbarcontroller作爲rootViewController,一個帶有視圖控制器的導航控制器,它說視圖控制器A.我將視圖控制器B推到視圖控制器A的導航堆棧上。我模擬內存警告。didreceivememorywarning在可見視圖控制器上導致viewdidunload
1)視圖控制器A獲取內存警告,其視圖被卸載,一切正常。
2)視圖控制器B(當前可見)獲取內存警告。我打印出它的超級視圖。我甚至證實,導航控制器的
(gdb) po [[self view] superview]
<UIViewControllerWrapperView: 0x12310c80; frame = (0 64; 1024 655); autoresize = W+H; layer = <CALayer: 0x12310cb0>>>
(gdb) po [self navigationController]
<UINavigationController: 0x714efd0>
(gdb) po [[[self navigationController] view] superview]
<UIViewControllerWrapperView: 0x740b0c0; frame = (0 0; 1024 719); autoresize = W+H; layer = <CALayer: 0x740b140>>
/*** can you see how desperate i am? :) ***/
(gdb) po [[[[[self view] window] rootViewController] view] superview]
<UIWindow: 0x7162910; frame = (0 0; 768 1024); opaque = NO; autoresize = RM+BM; layer = <CALayer: 0x7163660>>
3)我知道的下一件事,可見視圖控制器的觀點已被卸載(在視圖控制器的viewDidUnload方法斷點被擊中)
因爲即時通訊目前正在尋找在這個視圖控制器,它的viewDidLoad永遠不會再被調用,除非我回到它。這似乎與相當多的帖子說,當superview!= nil視圖沒有被卸載!,我已經調查了整個堆棧!
爲了澄清,我不問在viewDidUnload做什麼,或發佈什麼樣的數據等等我試圖瞭解爲什麼框架發送一個didReceiveMemoryWarning到一個視圖控制器,顯然仍然是部分的視圖hiearchy。
想法?
這裏是問題:從上面打印的gdb輸出中,在超級視圖不是零的時候,在我看來視圖被釋放事件。有沒有人遇到類似的情況? – Ying
這不是一個答案。 –