从Swift初始化obj viewcontroller时未调用viewDidLoad

时间:2015-08-16 17:45:13

标签: ios objective-c swift

在我的Swift代码中,我试图像下面那样实例化一个Objective-C视图控制器,但是没有调用viewDidLoad方法。

let detailMessageVC = DetailMessageViewController(nibName:nil, bundle:nil)

如果我像Objective-C代码那样实例化相同的viewcontroller 它确实被称为。视图控制器没有xib。

self.detailMVC = [[DetailMessageViewController alloc] init];

有谁知道为什么会这样?我希望在从Swift调用时具有相同的行为,因为我依靠viewDidLoad来执行各种初始化。这是使用Xcode 6.3.2

2 个答案:

答案 0 :(得分:1)

如评论所述,视图控制器的初始化与其viewDidLoad回调之间没有联系。

您甚至可以在初始化之前调用viewDidLoad。因为如果ViewController有效地加载了视图,则会调用viewDidLoad

检查那里:https://stackoverflow.com/a/4862772/1486230

虽然,我不会依赖viewDidLoad,除非你知道你将有效地展示你的ViewController;主要是使用myVC.view

想想初始化一个ViewController(它只是一个逻辑对象)与创建它的视图不同。出于性能原因,如果不需要,iOS不会创建图形对象。如果你在Swift和Objective-C之间有所不同,那么更多因为Swift在优化方面可能更好。但这种行为很正常。

答案 1 :(得分:0)

对于iOS 9+,您可以拨打vc.loadViewIfNeeded()