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

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

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

viewDidUnload被调用,每当收到内存警告,并调用每个视图控制器有一个不可见的视图,如UINavigationController如果你推新视图控制器,这个视图控制器导致内存不足的视图控制器viewDidUnload将被调用(因为它的看法是不可见的)

另外请注意,如果你实现了didReceiveMemoryWarning并且不要调用[super didReceiveMemoryWarning]; ,你的viewDidUnload不会被调用

例如,如果你在你的视图控制器这个

 - (void)didReceiveMemoryWarning { //with [super didReceiveMemoryWarning]; // viewDidUnload gets called //without [super didReceiveMemoryWarning]; viewDidUnload does not get called } 

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

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

受testing程序条款限制,我认为我们无法详细讨论iOS 6 Beta,但是我也可能build议您在8页的iOS 6 Beta 1版本中查看第6页的底部有关viewWillUnload和viewDidUnLoad的说明。