簡體   English   中英

是否UIViewController調用方法presentViewController從內存中刪除?

[英]Is the UIViewController calling the method presentViewController removed from the memory?

據說我有一個UIViewController A和一個UIViewController B. 從A,我調用方法presentViewController:B。 當B出現時,A會發生什么? 它是從內存中刪除的嗎? 如果沒有,我應該用什么方法來刪除它?

如果我的UI流程是這樣的, A-> B-> A-> B-> A-> B-> ...依此類推,如何防止內存相應增加?

當您使用presentViewController:animated:completion:方法從控制器A呈現控制器B模態,什么情況是, presentedViewController財產A被設置到控制器B ,和presentingViewController財產B被設置為A 因此,在進行演示時,兩個控制器都保存在存儲器中。

當您從去BA ,你叫dismissViewControllerAnimated:completion:ApresentingViewController物業B ,就像這樣:

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

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

之后, ApresentedViewController屬性將被設置為nil ,因此,如果沒有任何其他強指針指向它,系統將對其進行內存釋放。

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

  • 使用UINavigationController並按B,然后再將其彈出,然后返回A
  • 或者使B成為窗口的新根控制器,然后再次使用A並添加適當的轉換
  • 或者使用a作為根並呈現B.然后解雇B並且你回到A.

除非你彈出它,否則UIViewController將保留在內存中。

使用push和pop而不是僅僅推送新的UIViewControllers

而不是這個A->B->A->B->A->B->

你會得到這個A<->B

有一個根視圖控制器,當A完成它的任務時,讓你的根視圖負責刪除A和呈現B。 B完成其任務警告您的根視圖刪除B並再次顯示A時。

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

這是一個非常好的教程,可以看到這個: 鏈接

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM