假設我有一個UIViewController A和UIViewController B。從A,我調用presentViewController方法:B。當B出現時,A會發生什麼?它是否從內存中移除?如果不是,我應該用什麼方法來刪除它?UIViewController調用了從內存中移除的方法presentViewController嗎?
如果我的UI流是這樣的,如何防止內存相應增加?如果我的UI流是這樣的話,如何防止內存相應地增加?
假設我有一個UIViewController A和UIViewController B。從A,我調用presentViewController方法:B。當B出現時,A會發生什麼?它是否從內存中移除?如果不是,我應該用什麼方法來刪除它?UIViewController調用了從內存中移除的方法presentViewController嗎?
如果我的UI流是這樣的,如何防止內存相應增加?如果我的UI流是這樣的話,如何防止內存相應地增加?
當您使用presentViewController:animated:completion:
方法從控制器A
呈現控制器B
模態,會發生什麼情況是,A
的presentedViewController
屬性設置爲控制器B
,和B
的presentingViewController
屬性設置爲A
。因此,在演示過程中,兩個控制器都保存在內存中。
當您從B
去A
,您通過的B
的presentingViewController
財產呼籲A
dismissViewControllerAnimated:completion:
,像這樣:
[self.presentingViewController dismissViewControllerAnimated:YES completion:nil];
(您也可以撥打[self dismissViewControllerAnimated:YES completion:nil]
,系統會自動將請求轉發到呈現視圖控制器。)
之後,的A
的presentedViewController
屬性將被設置爲nil
,因此,它會受到由系統內存釋放,條件是不存在指向它的任何其它強指針。
該UIViewController
將保持在內存中,除非你彈出它。
使用推送& 流行而不是隻是推新UIViewControllers
。
取而代之的是A->B->A->B->A->B->
你會得到這個A<->B
有一個根視圖控制器當過一個完成了它的任務,讓你的根視圖負責消除一個和並提出的B。同樣明智當B完成其任務提醒你的根視圖刪除B和顯示A再次。
不,A不會從內存中刪除。 如果你想A和B之間交替,您可以:
UINavigationController
推B,然後再彈出它關閉,你回到一個它不會被自動釋放。您可以使用dismissModalViewControllerAnimated
手動釋放它。
這裏是一個很好的教程,看看這個:Link
如果我有另一個UIViewController C,會發生什麼?所以流程會是這樣的,A-> B-> C-> A-> 當C調用dismissViewController時,是不是顯示出來了? –
@OscarYuandinata如果你想從'C'到'A',然後在'A'上調用'dismissViewControllerAnimated:completion:'。它將刪除'A'提供的視圖控制器('B'),以及任何其他的視圖控制器('C')。 –
我剛剛閱讀關於分配UIViewController作爲rootViewController 例如。
self.view.window.rootViewController = confirmPictureViewController;
哪一個是切換UIViewController的適當方式? –