2

[super loadView] 或 [super viewDidLoad] 写入时会发生什么?我试图删除代码,但堆栈溢出并进入无限循环。有人可以解释为什么需要这样做吗?

4

3 回答 3

4

首先,当你重写loadView,手动创建自己的视图时,你不应该调用超类的实现。这是因为您将手动创建一个视图,并使用那些而不是UIViewController的实现创建的视图。(请参阅loadview 文档。)

但是当你覆盖时viewDidLoad,你确实应该调用超类的实现。这是因为UIViewController's 的实现做了一些内部记账,所以除了超类所做的事情之外,viewDidLoad您还想运行您的自定义viewDidLoad代码。

于 2012-05-01T11:10:59.730 回答
3

它从您的超类调用该方法。让我们说它的 NSObject。这些方法的名称解释了:loadView 是加载视图的 NSObject 方法,viewDidLoad 是处理视图已加​​载的 NSObject 方法......沿着这些线 视图控制器中的方法本身“viewDidLoad”,也可能是“loadView”没有执行上述操作的代码...它仅用于自定义,因为您无法修改原始 .m 方法...

要找出您的超类,请转到 .h 文件:

   @interface MyViewController : MySuperClass //thats it!
于 2012-05-01T11:03:46.710 回答
2

底层类需要自己做一些簿记,以便在您开始将 UI 置于其之上之前做好准备。在 Android 中,相应的应用程序实际上会通过抛出一个 you-did-call-super-first 异常来故意崩溃。

于 2012-05-01T11:04:24.820 回答