从Swift初始化obj视图控制器时未调用viewDidLoad



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

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

如果我像这样从Objective-C代码实例化相同的视图控制器它确实会被调用。视图控制器没有xib

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

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

正如评论所说,视图控制器的初始化和它的viewDidLoad回调之间没有联系。

您甚至可以在init之前调用viewDidLoad。因为如果ViewController有效地加载了一个视图,viewDidLoad就会被调用。

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

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

就像初始化一个ViewController(它只是一个逻辑对象)不同于创建它的视图。出于性能原因,iOS不会创建不需要的图形对象。如果你发现Swift和Objective-C之间存在差异,更多是因为Swift在优化方面做得更好。但行为正常

对于iOS 9+,可以调用vc.loadViewIfNeeded()

最新更新