0

我有一个自定义 UIViewController 子类,它自己处理所有视图初始化(它不使用 nib)。还有另一个从 nib 加载的 UIViewController 子类。两者都包含在 UITabBarController 中。当内存警告出现时,第一个控制器会收到通知,但不会调用 viewDidUnload。第二个控制器也收到通知,它的 viewDidUnload 确实被调用了。我签入了 didReceiveMemoryWarning,self.isViewLoaded 为 TRUE,self.view.superview 为空。在通知出现时,两个控制器(它们的选项卡)都是不可见的。

由于内存警告,自定义视图控制器是否应该做一些特殊的事情来卸载?

4

2 回答 2

1

如果您是子类UIViewContoller化并且您没有从 NIB 初始化它,则需要对该-loadView方法进行子类化。否则 iOS 假定视图不能被卸载/重新加载。

只需将以下内容添加到您的实现中就足够了:

- (void)loadView {
    [super loadView];
}

我将尝试为此找到文档报价。

不幸的是,文档在这个问题上不是很清楚。

于 2012-04-04T14:34:00.907 回答
0

我会查看有关 View Controller Lifecycle 的文档。具体来说,查看收到内存警告时会发生什么的部分。如果您的自定义视图控制器的视图是屏幕上的视图,则操作系统不会尝试释放此视图。当您收到内存警告时,屏幕上是否显示此视图?在模拟器中,导航到 nib-loaded 视图并模拟内存警告,然后查看您的自定义视图是否被释放。另外,查看是否正在调用 viewWillUnload。并确保在您覆盖的任何这些方法中,您都调用了 super。

于 2012-04-04T14:19:04.470 回答