簡體   English   中英

解雇呈現的視圖控制器

[英]Dismissing Presented View Controller

我正在使用ARC + Storyboard。

我沒有使用segues或UINavigationController,而是使用以下內容呈現每個單獨的視圖:

UIStoryboard *storyBoard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
SecondViewController *secondViewController = [storyBoard instantiateViewControllerWithIdentifier:@"SecondVC"];

[self presentViewController:secondViewController animated:YES completion:nil];

所以,我的應用程序的典型流程是:

MainViewController presentViewController: SecondViewController presentViewController: ThirdViewController ...等

繼續前進之后,我不希望我提出的先前視圖控制器不再在內存中閑置。

現在,在我轉到第二個視圖控制器后,我可以在MainViewController中的計時器函數中放置一個斷點,並驗證一切仍然存在。

注意 :當presentViewController: ,viewcontroller會automatically retained ,但在ARC中它將處理保留的對象並在適當時釋放它。

稍后調用dismissModalViewControllerrelease the retained controller automatically

可能只是我,也許我沒有正確閱讀? 似乎對呈現和呈現視圖控制器存在誤解?

如果您的MainViewController在頂部,然后您調用: [mainViewController presentViewController:secondVC animated:YES completion:nil]; 然后secondVC成為呈現的控制器,mainViewController成為其presentViewController。


也就是說,看起來您希望您的呈現視圖控制器從內存中卸載?

“現在,在我轉到我的第二個視圖控制器后,我可以在MainViewController中的一個計時器函數中設置一個斷點,並驗證一切仍然存在。”

如果是這樣,這不是視圖控制器在這樣呈現時的行為方式。 presentingViewController將在內存中,直到它收到內存警告通知,然后它將僅卸載其視圖(如果它不在頂部)。 (控制器對象本身仍然存在)。

簡單地釋放呈現控制器不是一個好主意,因為它會破壞控制器之間的父子關系。 您可以手動修復此問題,但在某些情況下可能會有點麻煩。 如果您知道自己在做什么,那就推薦。

如果你想真正殺死presentViewController,你可能最好創建一個額外的自定義容器視圖控制器,以便它呈現視圖控制器並釋放前者。 查看控制器並不昂貴,它的觀點是它是什么:)

請注意 ,即使您使用導航控制器,加載/卸載其視圖的行為也會類似。 僅卸載視圖,因為導航控制器保留其所有視圖控制器。

可能這會有所幫助。

[viewController.view removeFromSuperview];

我在這里說: 我如何解雇觀點?

暫無
暫無

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

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