我认为我永远不应该调用超级loadView,但有些事情让我感到困惑。
在description of loadView (UIViewController Class Reference)中,有人说“这个方法的自定义实现不应该调用super.",但在他们给出的ZoomingPDFViewer示例中,loadView实现(ZoomingPDFViewerViewController)调用的是超级loadView。
我试着从我的loadView方法中调用它,它工作得很好,但我就是不明白不调用Super键意味着什么。
发布于 2012-03-06 00:05:11
您绝对不应该调用[super loadView]。我会说您在ZoomingPDFViewer示例中发现了一个bug。
当您希望以编程方式为视图控制器(而不是使用xib)创建视图层次结构时,可以覆盖loadView。
正如您所指出的,docs 明确声明您不应该调用。
此方法的自定义实现不应调用super.
我假设这是为了避免从xib加载和以编程方式创建视图,因为基础使用此方法从xib加载视图:
如果视图控制器具有关联的nib文件,则此方法从nib文件加载视图。
还要注意,即使在分配UIViewController对象期间为nibNameOrNil参数传递了nil,loadView的UIViewController实现也会尝试加载其中包含相关类名的任何xib。
如果使用initWithNibName:
:方法显式地为视图控制器分配了一个nib文件,或者如果iOS在应用程序包中找到了具有基于视图控制器的类名的名称的nib文件,则视图控制器具有关联的nib文件。如果视图控制器没有关联的nib文件,则此方法将改为创建一个普通的UIView对象。
此方法的真正目的是让您完全控制视图层次结构的构建,而不依赖于内置的xib加载机制。
您可以覆盖此方法,以便手动创建视图。
就我个人而言,如果:1,我会重写loadView。)我将为它创建的xib实际上是微不足道的或2。)控件的布局非常动态,因此创建具有静态布局的xib几乎没有什么好处。
发布于 2012-03-06 00:09:19
NSViewController尝试从-loadView中的nib初始化视图。由于没有为控制器设置nib名称,因此只会给出一个self.view = nil;我假设UIViewController也是这样工作的。
所以它应该是安全的,但你完全没有必要。
发布于 2012-03-06 00:04:32
如果你没有在你的IB中创建一个视图,那么你应该在你的代码中调用超级loadView来给你的程序一个视图。
在自定义视图的情况下,您应该使用接口构建器创建一个视图,因此您不需要调用它。
https://stackoverflow.com/questions/9569749
复制相似问题