簡體   English   中英

Objective-C:模態搜索和發布視圖控制器

[英]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成為loginViewControllerpresentedViewController

loginViewController.presentedViewController == mainViewController
mainViewController.presentingViewController == loginViewController

當您呈現視圖控制器時 ,呈現的視圖控制器將保留在視圖控制器層次結構中,以便您以后可以通過調用以下內容進行導航:

[loginViewController dismissViewControllerAnimated: ...];

因此,不釋放loginViewController完全正常,因為它仍然是窗口的rootViewController 出現的loginViewController只是阻塞了mainViewController

如果您想消除loginViewController ,可以直接設置window.rootViewController ,但這不會為過渡設置動畫。 您可以通過弄亂視圖控制器的視圖來獲得動畫,但這有點超出了官方批准的范圍...

IMO的最干凈的解決方案是實現一個基本的容器視圖控制器 ,該控制器將成為您窗口的rootViewController ,並且可以通過動畫化視圖的動畫,然后扔掉loginViewController ,來協調loginViewControllermainViewController之間的過渡。 這將是一種沒有導航欄和導航堆棧的原始導航控制器,只需將當前的視圖控制器替換為新的視圖控制器,然后丟棄前者即可。

暫無
暫無

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

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