Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 推送新视图时,UINavigationViewController中的根视图会发生什么变化?_Iphone_Cocoa Touch_Memory Management - Fatal编程技术网

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的视图不再位于窗口视图层次结构中。