Ios 没有为没有xib文件的alloc/init初始化的viewcontroller调用viewDidUnload
当我没有使用xib,并且在通过模拟器模拟任何iOS版本的内存警告时,使用alloc/init初始化我的Ios 没有为没有xib文件的alloc/init初始化的viewcontroller调用viewDidUnload,ios,memory-management,viewdidunload,memory-warning,Ios,Memory Management,Viewdidunload,Memory Warning,当我没有使用xib,并且在通过模拟器模拟任何iOS版本的内存警告时,使用alloc/init初始化我的ViewController时,为什么不调用viewDidUnload方法?似乎从未调用过此方法 若我使用xib文件通过alloc/initWithNibName创建控制器,则成功调用viewDidUnload方法。 为什么会这样?是否所有视图控制器都需要xib文件才能正常处理内存警告?viewDidUnload每当接收到内存警告并为每个具有不可见视图的视图控制器调用它时,例如,UINaviga
ViewController
时,为什么不调用viewDidUnload
方法?似乎从未调用过此方法
若我使用xib文件通过alloc/initWithNibName创建控制器,则成功调用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;
}
受测试计划条款的限制,我认为我们无法详细讨论iOS 6测试版,但我也可能建议您查看8页iOS 6 Beta 1发行说明中关于viewWillUnload和viewDidUnLoad的第6页底部。我没有覆盖didReceiveMemoryWarning方法,并且viewDidUnLoad仍然没有调用。您想要接收viewDidUnLoad的视图控制器在屏幕上仍然可见吗?如果是,那么它将不会接收到它,因为它在屏幕上不可见,我从这个控制器弹出