viewDidUnload没有为没有xib文件的alloc / init初始化viewcontroller调用

时间:2012-06-15 12:10:22

标签: ios memory-management viewdidunload memory-warning

当我通过模拟器模拟任何iOS版本的内存警告时,当我不使用xib并使用alloc / init初始化我的viewDidUnload时,为什么不调用ViewController方法?似乎从未调用此方法。

如果我通过alloc / initWithNibName使用xib文件创建控制器,则成功调用viewDidUnload方法。 为什么会这样? xib文件是否需要所有viewcontrollers正常处理内存警告?

3 个答案:

答案 0 :(得分:0)

每当收到内存警告并且为每个具有不可见视图的视图控制器调用它时都会调用

viewDidUnload,例如UINavigationController如果你按下一个新的视图控制器并且这个视图控制器会导致内存不足将调用呈现视图控制器viewDidUnload(因为其视图不可见)

另请注意,如果您实施didReceiveMemoryWarning但未致电[super didReceiveMemoryWarning];,则无法调用您的viewDidUnload

例如,如果您在视图控制器中有此

- (void)didReceiveMemoryWarning
{
    //with 
    [super didReceiveMemoryWarning]; // viewDidUnload gets called

    //without [super didReceiveMemoryWarning]; viewDidUnload does not get called
}

答案 1 :(得分:0)

我解决了我的问题。 我没有xib的实现只需要添加这段代码:

- (void) loadView {
   UIView * myView = [[[UIView alloc] init] autorelease];
   self.view = myView;
}

答案 2 :(得分:0)

受到测试计划条款的限制,我相信我们无法详细讨论iOS 6 Beta,但我也建议您查看8页iOS 6中的第6页底部关于viewWillUnload和viewDidUnLoad的Beta 1发行说明。