Ios 从Swift初始化obj viewcontroller时未调用viewDidLoad
在我的Swift代码中,我试图实例化如下所示的Objective-C视图控制器,但是没有调用Ios 从Swift初始化obj viewcontroller时未调用viewDidLoad,ios,objective-c,swift,Ios,Objective C,Swift,在我的Swift代码中,我试图实例化如下所示的Objective-C视图控制器,但是没有调用viewDidLoad方法 let detailMessageVC = DetailMessageViewController(nibName:nil, bundle:nil) 如果我从Objective-C代码中实例化相同的viewcontroller,如下所示 确实有人打电话给它。视图控制器没有xib self.detailMVC = [[DetailMessageViewController al
viewDidLoad
方法
let detailMessageVC = DetailMessageViewController(nibName:nil, bundle:nil)
如果我从Objective-C代码中实例化相同的viewcontroller,如下所示
确实有人打电话给它。视图控制器没有xib
self.detailMVC = [[DetailMessageViewController alloc] init];
有人知道为什么会这样吗?我希望在从Swift调用时具有相同的行为,因为我依赖
viewDidLoad
执行各种初始化。这是在Xcode 6.3.2中,正如注释所述,视图控制器的初始化和它的viewdiload
回调之间没有联系
您甚至可以在init之前调用viewDidLoad
。因为如果ViewController有效加载了视图,则会调用viewDidLoad
检查那里:
尽管如此,我不会依赖于viewDidLoad
,除非您知道您将有效地显示ViewController;主要通过使用myVC.view
就像初始化ViewController(它只是一个逻辑对象)不同于创建它的视图一样。出于性能原因,如果不需要图形对象,iOS将不会创建图形对象。如果你得到了Swift和Objective-C之间的区别,那是因为Swift在优化方面可能更好。但是这种行为是正常的。对于iOS 9+您可以调用
vc.loadViewIfNeeded()
我看不到您演示视图控制器。它是否显示?viewDidLoad
不应该为这两行中的任何一行调用<第一次访问视图控制器的view
属性时,将调用code>viewDidLoad。仅通过实例化视图控制器通常不会发生这种情况。通常在第一次尝试显示视图控制器时发生;然后viewDidLoad将不会自动调用,您需要调用[self.detilVc loadView]您可能不想单独调用loadView,这可能会导致递归循环内存泄漏,其中viewDidLoad未被调用,如果确实需要,您可能只想这样做,但我看不出真正需要这样做的情况:YOURViewController*so=[[YOURViewController alloc]init];UIView*what=so.view;这将导致视图被预加载,并将ViewDidLoad称为wll以防止副作用,但我同样不认为您为什么要这么做often@C_X切勿直接调用loadView
。文档甚至会告诉你这一点。这种行为是正常的,但有时你需要告诉UIKit加载视图,如果没有这样做的话。主要是在使用Xib时。这是通过调用vc.loadViewIfRequired()完成的