我是否总是要在-viewDidLoad方法中调用?

在苹果的scrollView示例中,他们不会调用它。 我一直认为这是必须的 。 我为什么要打电话呢?

如果你重写了方法,你仍然应该调用超级方法。 即使超级类今天没有做任何事情,苹果有一天可能会改变实现,你的代码将神秘地停止工作。 如果你真的不需要在这个方法中做任何事情,那么完全不用你的代码,super的方法将照常运行,而不需要你干预。

不,你不需要调用[super viewDidLoad]。 编辑:但阅读下面,因为我认为你绝对应该

让我们成为现实:苹果公司不会打破数以千计的应用程序,包括基于他们发布的示例代码的应用程序,通过决定他们目前没有处理的事件突然需要做一些开发人员可能或不想要停止的事情,至关重要的是,如果你不需要不同的行为,你不会停止事件。

编辑:看了苹果如何处理额外的一年的兼容性,现在我build议学习和使用正确的模式。 虽然我怀疑你的应用程序二进制文件会突然停止工作,但很显然,iPhone会检测你的二进制文件所针对的是哪个SDK,并基于此修改一些操作系统的行为。

有一天苹果可能会需要一些特定的模式在未来的SDK上进行。 这不会影响你,直到你用最新的Xcode + SDK重新编译,但是你会得到这些rest,没有任何源代码的变化。 了解并遵循该模式是安全的。

正如Markus所说,UIViewController在viewDidLoad方法中不会做任何事情,所以你不必调用它。 然而,如果你改变你的inheritance结构,突然间从UIViewControllerinheritance的类现在inheritance了在viewDidLoad方法做某些事情的东西,这是一个很好的习惯。

苹果的viewDidLoad文档没有声明你应该调用[super viewDidLoad],所以我会去苹果的说。 但是,请注意,对于像viewDidAppear其他类似的方法,您必须调用[super viewDidAppear]。

假设你有两个class级,一个父母和一个孩子。 子从父inheritance。 他们有一个叫greet的方法,它返回一个string。

以下是父级方法的样子:

码:

-(NSString *)greet { return @"Hello"; } 

我们希望孩子向他的父母学习。 所以我们用超级来表示问候妈妈怎么会打招呼,但是也有我们自己的小小的补充。

代码://从父inheritance

 -(NSString *)greet { NSString *parentGreeting = [super greet]; return [parentGreeting stringByAppendingString:@", Mommy"] } 

所以现在,家长问候“你好”,孩子问候“你好,妈妈”。 后来,如果我们改变家长的问候来回报“嗨”,那么两个class都会受到影响,你会有“你好”和“你好,妈妈”。

super用于调用由超类定义的方法。 它用于访问被子类覆盖的方法,以便类可以将自己的代码包装在父类实现的方法中。 如果你正在做任何types的inheritance,这是非常方便的。

您不必调用[super viewDidLoad]

据我所知,超类(UIViewController)中的viewDidLoad只是一个空的函数,当ViewController被一个nib文件初始化的时候被调用。

所以如果你需要做任何初始化,你应该重写这个函数并把你的代码放在那里。

只是注意到,如果你不在这些函数中调用super,那么Xcode 6的静态分析器会发出警告。 所以现在看来​​苹果现在肯定希望我们这样称呼它。

虽然在xCode 7 Beta / Swift 2中super.viewDidLoad不会编译。 错误说它只在osx 10.10中可用,而自动修复function则可以

 if #available(OSX 10.10, *){ super.viewDidLoad()} else { // Fallback on earlier versions } // My code }