Ios UIViewController在执行推送序列时是否应解除分配

Ios UIViewController在执行推送序列时是否应解除分配,ios,memory-management,uiviewcontroller,automatic-ref-counting,uistoryboardsegue,Ios,Memory Management,Uiviewcontroller,Automatic Ref Counting,Uistoryboardsegue,我有一个LoginViewController(UIViewController),当满足所有条件并且用户点击登录按钮时,将运行一个故事板序列来推送ProfileViewController(UIViewController)。当这种情况发生时,我在LoginViewController的dealloc方法中有一个log语句,以查看它是否被调用,但令我失望的是,它从未被调用。我的问题是它是否应该被命名?此外,当我登录时,有时会收到“收到的内存警告”,有时不会收到,这让我感到奇怪,因为我在这两种情

我有一个LoginViewController(UIViewController),当满足所有条件并且用户点击登录按钮时,将运行一个故事板序列来推送ProfileViewController(UIViewController)。当这种情况发生时,我在LoginViewController的dealloc方法中有一个log语句,以查看它是否被调用,但令我失望的是,它从未被调用。我的问题是它是否应该被命名?此外,当我登录时,有时会收到“收到的内存警告”,有时不会收到,这让我感到奇怪,因为我在这两种情况下都采取了完全相同的步骤,但我一次收到了内存警告,而另一次没有收到

任何人都可以在这上面发光,那太好了


谢谢。

UINavigationController
维护一组视图控制器。从堆栈上的一个元素开始,即
LoginViewController
。推送
ProfileViewController
时,堆栈上现在有两个元素。
LoginViewController
在从堆栈中删除之前无法解除分配

如果希望
ProfileViewController
替换导航控制器堆栈上的
LoginViewController
,可以编写自定义segue类来实现该行为


(您可能认为可以在情节提要中使用“替换”或“显示详细信息(例如替换)”分段类型,但只有当您使用
UISplitViewController
时,这些类型才起作用)

启用ARC后,当对象未被引用时,它将被释放

为了显示来自
ProfileViewController
的视图,您可以在
LoginViewController
中实例化它的一个对象,这样您在显示纵断面图后仍然可以看到它。如果发布了
LoginViewController
实例,则也将发布纵断面图(假定没有其他人引用它)。出于同样的原因,
LoginViewController
实例没有被释放,因为另一个对象持有对它的引用。假设您的视图显示在
窗口中
->
ProfileViewController
->
ProfileViewController
,则该窗口可防止ProfileViewController实例被释放


如果您有两个视图,正如我目前所假设的,那么内存警告应该来自其他地方。两个视图不能导致此问题。

感谢您的回复。.我的ProfileViewController中还有一个注销功能。单击注销按钮后,您将返回LoginViewController,这是通过UnwindSegue完成的。如果我用ProfileViewController替换LoginViewController,而不是将其添加到堆栈中,那么注销功能是否仍能按预期工作,还是会导致崩溃@rob Mayoffi如果使用展开序列返回到
LoginViewController
,则需要将
LoginViewController
留在堆栈上,并希望它保持分配状态。听起来你并不是真的有问题。我的应用运行得很好。但是,当我在登录并访问ProfileViewController 5秒钟后看到“已接收内存警告”时,我开始认为我确实有问题@rob Mayoffi如果你认为自己有内存问题,请在分配工具下运行你的应用程序。(要开始,请使用菜单栏>产品>配置文件。)