在init之前调用viewDidLoad?

时间:2010-07-02 13:32:22

标签: ios objective-c

我面临一个奇怪的情况。在我的控制器中,viewDidLoadinit之前调用。这背后有任何技术原因吗?

6 个答案:

答案 0 :(得分:48)

viewDidLoad方法中访问self.view时正在调用init方法(因为self.view尚未从笔尖加载,因此进程似乎已紧固它没有返回nil)。

答案 1 :(得分:14)

我知道这是一个有点旧的帖子,但我会在任何地方发表我的观点,因为我认为它可以帮助某人。

好吧,我一直处于同样的境地。我认为viewDidLoad是在我的视图控制器类中的init方法之前调用的。但真正发生的事情并非如此:流程在init方法上启动,但在调用[super init *]时跳转到viewDidLoad,因此viewDidLoad方法中的日志消息首先显示在我的自定义初始化中。

我认为就是这样。我希望这能节省一些时间。

[抱歉我的英文]

答案 2 :(得分:6)

我不知道viewController是什么类型的,但是我遇到了类似UITabBarController的情况。 我认为用UITabBarController可以帮助另一个人面对它 据我所知,所有viewControllers在viewDidLoad之前调用init,除了UITabBarController及其子类。
正如Andrew声称here,UITabBarControllers在[super init]方法中调用loadView,这导致对viewDidLoad的调用。因此,在init完成其工作之前将调用viewDidLoad方法 如果你在viewDidLoad中设置了一些东西,你应该在调用[super init]之后在init方法中进行设置。

答案 3 :(得分:3)

从代码初始化UIViewController时,使用-initWithNibName:bundle:,而当从XIB初始化时,XIB加载代码将调用-initWithCoder:。将调用这两种方法中的一种,并且它们肯定会在-viewDidLoad之前被调用。

除非你自己调用它(你永远不应该这样做),否则不可能首先调用-viewDidLoad

答案 4 :(得分:0)

不,在 init之后始终将viewDidLoad消息称为

你确定会调用init吗?有几种初始化方法,特别是对于UIViewController,可能会调用另一种方法,而不是让你以不同的方式思考。

如果您需要更多信息,请粘贴viewDidLoad代码和所有init方法,并告诉我们如何加载(即使用代码)或从笔尖加载。

答案 5 :(得分:0)

如果从主nib文件加载ViewController,则很可能是调用初始化控制器的initWithCoder。