具体来说,我应该怎样处理现在在推送新视图控制器后隐藏的视图? 在我的情况下,我有一个动画视图,在视图关闭后继续执行。
是否有一些公认的惯例? 我是否从内存中删除了View Controller和View? Cocoa Touch有一个方便的方法来“暂停”视图(和控制器)并将其从内存中删除,并在需要时(弹出后)将其恢复存在吗? 我是否必须自己存档然后取消存档?
有什么例子可以指出我吗?
谢谢
答案 0 :(得分:3)
另一种可能的解决方案是实现以下两种方法:
– viewWillAppear:
– viewDidAppear:
– viewWillDisappear:
– viewDidDisappear:
您可以在viewWillDisappear
或viewDidDisappear
中停止动画,然后在viewWillAppear
或viewDidAppear
中重新启动动画。您还可以在停止之前存储有关动画的任何必要状态信息。
答案 1 :(得分:2)
在内存不足的情况下,如果控制器的'view'属性不在屏幕上,它的'view'属性将自动设置为nil。然后视图将在需要时自动再次加载 - 并且此时应调用viewDidLoad。
如果您的视图控制器保留了顶级视图的任何子视图,那么您可能希望覆盖视图控制器的setView:方法,检查视图是否设置为nil,如果是,则释放您的子视图固定。否则,顶级视图可能永远不会被释放。
- (void)setView:(UIView *)view
{
[super setView:view];
if (view == nil)
{
// Release other views
// self.someView = nil;
}
}
答案 2 :(得分:1)
每当你调用pushViewController时,当前的viewcontroller都会被导航控制器存储在一个数组中(可以使用navcontroller的viewControllers属性访问它)。
将其视为堆栈。在调用pushViewController时,会在当前viewcontroller顶部的堆栈中添加一个新的viewcontroller。但是你的rootviewcontroller仍在内存中。当你调用popViewController时,该视图控制器将从堆栈中删除并释放。
因此,如果您想在视图消失时停止动画,请使用Andy建议的viewWillDisappear方法。