我有一个自定义的UIViewController子类,它自己处理所有的视图初始化(它不使用nib)。还有另一个从nib加载的UIViewController子类。两者都包含在UITabBarController中。 当出现内存警告时,第一个控制器会收到通知,但不会调用viewDidUnload。第二个控制器也接收通知,并且它的viewDidUnload会被调用。 我检查了didReceiveMemoryWarning,self.isViewLoaded为TRUE,self.view.superview为null。 两个控制器(它们的选项卡)在通知出现时都是不可见的。
自定义视图控制器是否应该在内存警告结果中卸载?
答案 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。并确保在任何这些方法中你都要超越你称之为超级。