我有两个UIViewControllers:loginViewController和MainViewController。IOS uiviewcontroller:如果rootviewcontroller设置为一个新的viewcontroller将视图控制器是免费的
我的应用程序的逻辑是这样的:
在didFinishLaunchingWithOptions,我检查,如果用户已经登录 如果是的话,我去MainViewController。 如果不是,我去loginViewController让他登录,然后去MainViewController。
当用户在MainViewController中时,他可以注销。当他注销时,他会去LoginViewController。
所有的viewController都以编程方式创建。所以当用户在MainViewController中时,当他点击注销按钮时,我创建了一个新的loginViewController并为其设置了rootViewController。
我的问题是: 如果用户通过loginViewController去MainViewController,MainViewController.presentingViewController是loginViewController和loginViewController.presentedViewController是MainViewController,他们会在某个时候被释放,否则他们将永远留在了记忆,当我设置RootViewController的给新创建loginViewController?
由于注销按钮未必是MainViewController,我怎么能去loginViewController从注销按钮的的viewController?如果我使用presentViewController,是否会有太多重复的viewController创建?如果我将rootViewController设置为loginViewController,那么如果其他viewController通过presentationViewController和presentedViewController具有强引用关系,它将如何释放?
我对viewControllers的生命周期有点糊涂......
对不起长描述...
感谢, - 李
感谢您的回答。但是它们通过呈现控制器和呈现控件来指向对方。这两个属性并不弱。那为什么他们会被释放? – user1165560 2014-10-20 04:32:39
@ user1165560你其实是正确的!看起来,呈现的视图控制器与呈现视图控制器有很强的交叉引用,这让我感到惊讶。我研究过这个,并提出视图控制器的行为是不直观的,在我看来是有缺陷的。你可能想检查我准备的这三个例子https://gist.github.com/bartekchlebek/4b2568e22f372bd8cd2f – 2014-10-20 05:10:27
感谢你的例子。这是否意味着我应该在登录后使用push而不是present,因为mainView不会被loginView取消。也许使用呈现是错误的... – user1165560 2014-10-20 05:41:09