[英]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中它將處理保留的對象並在適當時釋放它。
稍后調用dismissModalViewController
將release the retained controller automatically
。
可能只是我,也許我沒有正確閱讀? 似乎對呈現和呈現視圖控制器存在誤解?
如果您的MainViewController在頂部,然后您調用: [mainViewController presentViewController:secondVC animated:YES completion:nil];
然后secondVC成為呈現的控制器,mainViewController成為其presentViewController。
也就是說,看起來您希望您的呈現視圖控制器從內存中卸載?
“現在,在我轉到我的第二個視圖控制器后,我可以在MainViewController中的一個計時器函數中設置一個斷點,並驗證一切仍然存在。”
如果是這樣,這不是視圖控制器在這樣呈現時的行為方式。 presentingViewController
將在內存中,直到它收到內存警告通知,然后它將僅卸載其視圖(如果它不在頂部)。 (控制器對象本身仍然存在)。
簡單地釋放呈現控制器不是一個好主意,因為它會破壞控制器之間的父子關系。 您可以手動修復此問題,但在某些情況下可能會有點麻煩。 如果您知道自己在做什么,那就推薦。
如果你想真正殺死presentViewController,你可能最好創建一個額外的自定義容器視圖控制器,以便它呈現視圖控制器並釋放前者。 查看控制器並不昂貴,它的觀點是它是什么:)
請注意 ,即使您使用導航控制器,加載/卸載其視圖的行為也會類似。 僅卸載視圖,因為導航控制器保留其所有視圖控制器。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.