[英]Objective-C : Modal Segues and Releasing View Controller
我的應用程序上的初始視圖控制器是UITabBarController,它為登錄的用戶顯示。
但是,對於新用戶,我的應用程序委托將首先將他們指向登錄/注冊視圖控制器:
// New user, show login
self.window.rootViewController = [self.window.rootViewController.storyboard instantiateViewControllerWithIdentifier:@"LoginViewController"];
用戶完成登錄/注冊后,我將用戶發送到標簽欄,如下所示:
// Login done, go to main view
[self performSegueWithIdentifier:@"userLoginToMainSeg" sender:self];
但是,通過這種方式,不會釋放LoginViewController(不會調用dealloc)。
有人可以在這里解釋我的錯誤嗎?
您的情態搜索基本上是在做:
[loginViewController presentViewController:mainViewController animated:YES completion: ...];
這意味着mainViewController
成為loginViewController
的presentedViewController
:
loginViewController.presentedViewController == mainViewController
mainViewController.presentingViewController == loginViewController
當您呈現視圖控制器時 ,呈現的視圖控制器將保留在視圖控制器層次結構中,以便您以后可以通過調用以下內容進行導航:
[loginViewController dismissViewControllerAnimated: ...];
因此,不釋放loginViewController
完全正常,因為它仍然是窗口的rootViewController
。 出現的loginViewController
只是阻塞了mainViewController
。
如果您想消除loginViewController
,可以直接設置window.rootViewController
,但這不會為過渡設置動畫。 您可以通過弄亂視圖控制器的視圖來獲得動畫,但這有點超出了官方批准的范圍...
IMO的最干凈的解決方案是實現一個基本的容器視圖控制器 ,該控制器將成為您窗口的rootViewController
,並且可以通過動畫化視圖的動畫,然后扔掉loginViewController
,來協調loginViewController
和mainViewController
之間的過渡。 這將是一種沒有導航欄和導航堆棧的原始導航控制器,只需將當前的視圖控制器替換為新的視圖控制器,然后丟棄前者即可。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.