确定UIViewController已加载并具有有效视图的最佳方法是什么?

时间:2008-12-04 05:19:39

标签: iphone objective-c cocoa-touch

当访问UIViewController的view属性时,它首先检查它是否有现有视图,然后返回。如果没有,它会加载其nib或调用-loadView。

当控制器收到-didReceiveMemoryWarning消息时,默认行为是删除该缓存视图(假设它当时未使用)。

如果我覆盖-didReceiveMemoryWarning,如何确定视图是否已被清除?我的理解是默认实现检查self.view.superview == nil。如果是这样,它将清除缓存的视图。当然,它首先检查是否是一个缓存视图,如果没有,它什么都不做。但是,作为子类,我不能调用self.view.superview,因为如果不是视图,它将生成一个。

那么,我如何判断_view是否存在? (我不能只看_view;我在为设备构建时遇到链接错误。)

3 个答案:

答案 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可能会更倾向于做出那些变化。