故事板控制器不能解除分配

我的故事板的初始视图控制器使用performSegue:withIdentifier加载另一个视图控制器performSegue:withIdentifier方法,该方法依次使用相同的performSegue:withIdentifier方法加载其他控制器。

但是,初始视图控制器和第二视图控制器都没有解除分配。 通过仪器可以看出它们的参考数都是1。

当他退出应用程序时,我需要将用户发送回第一个控制器。 到目前为止,我想到的唯一方法是使用performSegue:withIdentifier方法并将用户发送回初始控制器。

但是,我担心以前的控制器不会被解除分配,从而导致重新创建相同的视图控制器。

由于我需要将用户注销回第一个屏幕,因此我想确保已取消分配所有以前的视图控制器。

当您执行推送或模态segue时,它不会(也不应该)释放您正在查看的视图控制器。 它需要保持它,以便当您弹出/关闭它时,它仍然会存在。 此规则的例外是使用拆分视图控制器并使用替换segue时。 但这是一个特例。

如果要返回第一个场景,如果您使用的是导航控制器并且仅使用push segues,则可以使用popToRootViewControllerAnimated 。 (对于iOS 5目标,我将始终使用导航控制器,并且如果我不希望它可见则隐藏导航栏。因此。能够弹回多个级别很方便。实现相同效果很麻烦使用模态segues。)在iOS 6中,您可以使用展开segue ,您可以在其中弹出/取消任意数量级别的场景,例如,返回到您的初始场景。

使用performSegue循环不是一个好主意..

如果必须返回VC层次结构,则应该使用UINavigationController来推送/弹出VC,或者使用/解除模态VC。 您可以通过模态呈现UINavigationController来组合两者。

在iOS 6之前, UIViewController将保持活跃状态​​,但其更昂贵的UIView将被释放以节省内存。 与UIView相比, UIViewController本身相当轻松。 从iOS 6开始,您应该根据文档覆盖didReceiveMemoryWarning

UIViewController的文档:

内存管理

内存是iOS中的关键资源,视图控制器提供内置支持,以在关键时刻减少内存占用。 UIViewController类通过didReceiveMemoryWarning方法提供一些自动处理低内存条件的方法,该方法释放不需要的内存。

在iOS 6之前,当发生内存不足警告时,UIViewController类会清除其视图,如果它知道它可以重新加载或稍后再次重新创建它们。 如果发生这种情况,它还会调用viewWillUnload和viewDidUnload方法,让您的代码有机会放弃与视图层次结构相关联的任何对象的所有权,包括从nib文件加载的对象,在viewDidLoad方法中创建的对象以及创建的对象懒惰地在运行时并添加到视图层次结构中。 在iOS 6上,视图永远不会被清除,并且永远不会调用这些方法。 如果视图控制器需要在内存不足时执行特定任务,则应覆盖didReceiveMemoryWarning方法。

只要你管理你正确的反应(取决于iOS版本)和dealloc视图我在这里看到没有问题。