2014-02-24 52 views

回答

5

當您使用presentViewController:animated:completion:方法從控制器A呈現控制器B模態,會發生什麼情況是,ApresentedViewController屬性設置爲控制器B,和BpresentingViewController屬性設置爲A。因此,在演示過程中,兩個控制器都保存在內存中。

當您從BA,您通過的BpresentingViewController財產呼籲AdismissViewControllerAnimated:completion:,像這樣:

[self.presentingViewController dismissViewControllerAnimated:YES completion:nil]; 

(您也可以撥打[self dismissViewControllerAnimated:YES completion:nil],系統會自動將請求轉發到呈現視圖控制器。)

之後,的ApresentedViewController屬性將被設置爲nil,因此,它會受到由系統內存釋放,條件是不存在指向它的任何其它強指針。

+0

如果我有另一個UIViewController C,會發生什麼?所以流程會是這樣的,A-> B-> C-> A-> 當C調用dismissViewController時,是不是顯示出來了? –

+0

@OscarYuandinata如果你想從'C'到'A',然後在'A'上調用'dismissViewControllerAnimated:completion:'。它將刪除'A'提供的視圖控制器('B'),以及任何其他的視圖控制器('C')。 –

+0

我剛剛閱讀關於分配UIViewController作爲rootViewController 例如。 self.view.window.rootViewController = confirmPictureViewController; 哪一個是切換UIViewController的適當方式? –

0

UIViewController將保持在內存中,除非你彈出它。

使用推送& 流行而不是隻是推新UIViewControllers

取而代之的是A->B->A->B->A->B->

你會得到這個A<->B

0

有一個根視圖控制器當過一個完成了它的任務,讓你的根視圖負責消除一個和並提出的B。同樣明智當B完成其任務提醒你的根視圖刪除B和顯示A再次。

1

不,A不會從內存中刪除。 如果你想A和B之間交替,您可以:

  • 使用UINavigationController推B,然後再彈出它關閉,你回到一個
  • 或使B中的新的根控制器你的窗口然後再和,並添加適當的過渡
  • 或使用爲根,目前B.然後解僱B和你回到A.
0

它不會被自動釋放。您可以使用dismissModalViewControllerAnimated手動釋放它。

這裏是一個很好的教程,看看這個:Link

相關問題