永远不会调用自定义UIViewController viewDidUnload

时间:2012-04-04 14:10:10

标签: ios cocoa uiviewcontroller

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

自定义视图控制器是否应该在内存警告结果中卸载?

2 个答案:

答案 0 :(得分:1)

如果您是UIViewContoller的子类并且未从NIB初始化它,则需要继承-loadView方法。否则,iOS会假定无法卸载/重新加载视图。

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

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

我会尝试为此找到文档引用。

The documentation is unfortunately not very clear on this matter.

答案 1 :(得分:0)

我会查看View Controller生命周期的文档。具体来说,请查看收到内存警告时会发生什么的部分。如果您的自定义视图控制器的视图是屏幕上的视图,则操作系统将不会尝试释放此视图。当你收到内存警告时,屏幕上会显示此视图吗?在模拟器中,导航到加载nib的视图并模拟内存警告,然后查看是否释放了自定义视图。另外,查看是否正在调用viewWillUnload。并确保在任何这些方法中你都要超越你称之为超级。