子类化 UIViewController 时调用 viewDidLoad 是啥?

Posted

技术标签:

【中文标题】子类化 UIViewController 时调用 viewDidLoad 是啥?【英文标题】:What invokes viewDidLoad when subclassing UIViewController?子类化 UIViewController 时调用 viewDidLoad 是什么? 【发布时间】:2011-08-11 09:43:21 【问题描述】:

在将协议和委托进一步扩展到 UIKit 框架的实现中时,我试图了解它。

根据我对 *** post 的理解,委托方法的名称中通常包含 Did、Should 和 Will。

基于此,我假设在 UIViewController.h 中声明的- (void)viewDidLoad; 是一个委托方法,但它是什么以及从哪里来的?

我查看了 UIViewController 的头文件,它只遵守 NSCoding 协议,这是一个死胡同。 UIViewController 的超类 UIResponder 在我看来也是死路一条。

我在这里使用了 viewDidLoad 作为示例,但这可能适用于 UIViewController 中的任何 Did、Should 和 Will 方法。

这仅仅是指南例外的情况之一,还是我遗漏了什么?

【问题讨论】:

它不是委托方法,它只是 UIViewController 类的一部分 这是我的想法,框架保留了Did、Should 和Will 的语义,以供在生命周期中何时调用方法时参考。我想那时 UIViewController 的实现中有一些我们不需要看到的设备硬件的钩子。 【参考方案1】:

“did”、“should”和“will”这些词通常用来描述一个方法何时被调用,是否询问它是否“应该”做某事”,给你一个钩子让你在某事之前运行代码” will" 发生,或者作为“did”发生时的回调。这些词通常用于委托和回调方法中。

当你的 .nib 文件被加载到内存中,并且你的 IBOutlets 已经被实例化和连接,并且准备好配置时,viewDidLoad 被调用。如果您想继承 UIViewController,则无需担心自己调用它。

【讨论】:

我不是想调用 viewDidLoad,而是想了解为什么会有名称中包含 Did、Should 和 Will 的委托方法,您将通过@interface 中的协议声明进行声明,然后在那儿这些其他方法(例如viewDidLoad)是否也包含您只需从超类继承的Did、Should 和Will。然而,经过更多研究,我认为我最初认为任何事件类型方法都必须来自协议的想法是错误的,而它只是两个非继承类进行通信的一种方式。

以上是关于子类化 UIViewController 时调用 viewDidLoad 是啥?的主要内容,如果未能解决你的问题,请参考以下文章

UIViewController 的 Swift 子类化子类

使用 UITableView 子类化 UIViewController

如何在许多子类中使用 UITableViewDelegate 子类化 UIViewController

子类化 UIView/UIViewController

动态子类化 UIViewController 的错误

子类化 UIViewController 导致内存问题?