繁体   English   中英

调用 [super loadView] 可以吗?

[英]Is it ok to call [super loadView]?

我认为我永远不应该调用 [super loadView] 但有些事情让我感到困惑。

在 loadView ( UIViewController Class Reference ) 的描述中,说“您对该方法的自定义实现不应调用 super。”,但在他们提供的 ZoomingPDFViewer 示例中,loadView 实现 ( ZoomingPDFViewerViewController ) 正在调用 [super loadView]。

我试图从我的 loadView 方法调用它并且它工作正常,但我只是不明白不调用 super 是什么意思。

你绝对不应该调用[super loadView] 我想说您在 ZoomingPDFViewer 示例中发现了一个错误。

当您想以编程方式为您的视图控制器(不使用 xib)创建视图层次结构时,您可以覆盖loadView

正如您所指出的,文档明确指出您不应调用 super。

此方法的自定义实现不应调用 super。

我认为这是为了避免从 xib 加载和以编程方式创建视图,因为基础使用此方法从 xib 加载视图:

如果视图控制器具有关联的 nib 文件,则此方法从 nib 文件加载视图。

另请注意,即使在分配UIViewController对象期间,您为 nibNameOrNil 参数传递 nil,该参数的UIViewController实现loadView将尝试加载任何带有关联类名称的 xib。

如果 nibName 属性返回非 nil 值,则视图控制器具有关联的 nib 文件,如果视图控制器是从故事板实例化的,如果您使用 initWithNibName:bundle: 方法显式分配给它一个 nib 文件,或者如果 iOS在应用程序包中找到一个名称基于视图控制器类名的 nib 文件。 如果视图控制器没有关联的 nib 文件,则此方法会创建一个普通的 UIView 对象。

此方法的真正目的是让您完全控制构建视图层次结构,而无需依赖内置的 xib 加载机制。:

您可以覆盖此方法以手动创建视图。

就我个人而言,如果出现以下情况,我会覆盖loadView :1.) 我将为它制作的 xib 非常简单或 2.) 控件的布局非常动态,因此创建具有静态布局的 xib 几乎没有什么好处。

NSViewController 尝试从 -loadView 中的笔尖初始化视图。 由于您的笔尖名称没有为您的控制器设置,它只会给您一个 self.view = nil; 我认为 UIViewController 的工作方式相同。

所以它应该是安全的,但你完全没有必要。

如果您以编程方式创建 ViewController,则可以在override func loadView()的开头调用super.loadView()而不是super.loadView() self.view = UIView(frame: UIScreen.main.bounds) override func loadView()

然而,不叫self.viewsuper.loadView()因为前者会引发后者如果视图没有被加载。

我认为像机器人一样解释 Apple 的文档不是一个好主意。

如果你没有在你的 IB 中创建视图,那么你应该在你的代码中调用 [super loadView] 来为你的程序提供一个视图。

如果是您的自定义视图,您应该使用 interfaz 构建器创建一个视图,因此您不需要调用它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM