当我通过模拟器模拟任何iOS版本的内存警告时,为什么不viewDidUnload
调用方法,当我不使用xib并使用alloc/init来初始化我的?ViewController
似乎从未调用过此方法。
如果我使用 xib 文件通过 alloc/initWithNibName 创建控制器,则成功调用 viewDidUnload 方法。为什么会这样?所有视图控制器是否都需要 xib 文件才能正常处理内存警告?
当我通过模拟器模拟任何iOS版本的内存警告时,为什么不viewDidUnload
调用方法,当我不使用xib并使用alloc/init来初始化我的?ViewController
似乎从未调用过此方法。
如果我使用 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;
}
受限于 Beta 计划的条款,我相信我们无法详细讨论 iOS 6 Beta,但我也可能建议您在 8 页 iOS 6 Beta 1 版本中查看第 6 页底部有关 viewWillUnload 和 viewDidUnLoad 的注释。