Iphone 推送新视图时,UINavigationViewController中的根视图会发生什么变化?
具体来说,在按下新的视图控制器后,我应该如何处理现在隐藏的视图?Iphone 推送新视图时,UINavigationViewController中的根视图会发生什么变化?,iphone,cocoa-touch,memory-management,Iphone,Cocoa Touch,Memory Management,具体来说,在按下新的视图控制器后,我应该如何处理现在隐藏的视图? 在我的情况下,我有一个正在进行动画的视图,在视图离开屏幕后继续执行 有什么公认的惯例吗? 是否从内存中删除视图控制器和视图? Cocoa Touch是否有一种方便的方法“暂停”视图(和控制器)并将其从内存中删除,并在需要时(在弹出后)使其恢复存在? 我必须自己归档然后取消归档吗 你能给我举一些例子吗 谢谢在内存不足的情况下,如果控制器的“视图”属性不在屏幕上,它将自动设置为零。然后视图将在需要时自动再次加载-此时应调用viewDi
在我的情况下,我有一个正在进行动画的视图,在视图离开屏幕后继续执行 有什么公认的惯例吗? 是否从内存中删除视图控制器和视图?
Cocoa Touch是否有一种方便的方法“暂停”视图(和控制器)并将其从内存中删除,并在需要时(在弹出后)使其恢复存在? 我必须自己归档然后取消归档吗 你能给我举一些例子吗
谢谢在内存不足的情况下,如果控制器的“视图”属性不在屏幕上,它将自动设置为零。然后视图将在需要时自动再次加载-此时应调用viewDidLoad 如果视图控制器保留顶级视图的任何子视图,则可能需要覆盖视图控制器的setView:方法,检查视图是否设置为nil,如果设置为nil,则释放保留的子视图。否则,顶级视图可能永远无法解除分配
- (void)setView:(UIView *)view
{
[super setView:view];
if (view == nil)
{
// Release other views
// self.someView = nil;
}
}
另一种可能的解决方案是实施以下两种方法:
– viewWillAppear:
– viewDidAppear:
– viewWillDisappear:
– viewDidDisappear:
您可以在
视图将消失
或视图消失
中停止动画,然后在视图将出现
或视图消失
中重新启动动画。您还可以在停止动画之前存储有关动画的任何必要状态信息。无论何时调用pushViewController,导航控制器都会将当前viewcontroller存储在一个数组中(可以使用navcontroller的viewcontroller属性访问)
把它想象成一堆。调用pushViewController时,新的viewcontroller将添加到当前viewcontroller顶部的堆栈中。但您的rootviewcontroller仍在内存中。调用popViewController时,该viewcontroller将从堆栈中移除并释放
因此,如果要在视图消失时停止动画,请使用Andy建议的ViewWillEngase方法。viewDidLoad只调用一次。仅当视图弹出且不再在navcontroller的ViewController列表中时,该视图才会设置为nil。您不需要重写-setView方法。我们为您提供了回调方法-viewDidUnload来执行您提到的任务。只有在内存不足的情况下,viewController的view属性才会设置为nil,如果没有设置,则在pop操作后会向用户显示相同的视图。我不确定系统是否智能地处理了动画,因为当按下新的viewController时,rootViewController的视图不再位于窗口视图层次结构中。