当访问UIViewController的view属性时,它首先检查它是否有现有视图,然后返回。如果没有,它会加载其nib或调用-loadView。
当控制器收到-didReceiveMemoryWarning消息时,默认行为是删除该缓存视图(假设它当时未使用)。
如果我覆盖-didReceiveMemoryWarning,如何确定视图是否已被清除?我的理解是默认实现检查self.view.superview == nil。如果是这样,它将清除缓存的视图。当然,它首先检查是否是一个缓存视图,如果没有,它什么都不做。但是,作为子类,我不能调用self.view.superview,因为如果不是视图,它将生成一个。
那么,我如何判断_view是否存在? (我不能只看_view;我在为设备构建时遇到链接错误。)
答案 0 :(得分:67)
自iPhone OS 3.0起,您可以使用isViewLoaded
方法查看视图是否已加载。
答案 1 :(得分:3)
我认为在你的情况下最好做一些事情:
- (void)setView:(UIView *)view
{
if (!view)
{
// Clean up code here
}
[super setView:view];
}
答案 2 :(得分:0)
您可以使用object_getIvar()来获取值,而无需通过访问者。从本质上讲,它让您无需链接即可访问_view。另一方面,如果实际的ivar消失或重命名,它有可能破裂。传统上这从来不是一个真正令人担忧的问题,但是iPhone使用的现代运行时不会受到脆弱的基类问题的困扰,因此Apple可能会更倾向于做出那些变化。