Ios viewDidLoad与调用超级viewDidLoad

Ios viewDidLoad与调用超级viewDidLoad,ios,objective-c,Ios,Objective C,我正在学习objective-c教程,并注意到viewDidLoad中的代码放在超级viewDidLoad下,而不是第一次调用viewDidLoad 将代码置于viewDidLoad和super viewDidLoad下有什么区别 我理解对super的调用是对super类的调用,但不确定在这个上下文中是什么 非常感谢您的帮助。iOS中的标准做法是在超类完成其需要的设置(初始化属性、布局等)后,再进行所有子类设置。如果在开始改变之前不给超类一个机会来处理它的所有设置,那么可能会遇到一些奇怪的bug

我正在学习objective-c教程,并注意到viewDidLoad中的代码放在超级viewDidLoad下,而不是第一次调用viewDidLoad

将代码置于viewDidLoad和super viewDidLoad下有什么区别

我理解对super的调用是对super类的调用,但不确定在这个上下文中是什么


非常感谢您的帮助。

iOS中的标准做法是在超类完成其需要的设置(初始化属性、布局等)后,再进行所有子类设置。如果在开始改变之前不给超类一个机会来处理它的所有设置,那么可能会遇到一些奇怪的bug和行为

将代码置于viewDidLoad和super viewDidLoad下有什么区别

执行的顺序。您的实现将在超类实现运行后执行。有些实现什么都不做(细节应该抽象),但是调用它们不会有什么坏处(应该记录异常)

如果您正在寻找特定的差异,则根据类层次结构的不同,差异可能会很大。您应该忽略这些实现细节。只需说,在执行超类实现之前,超类实现可能不准备处理您的初始化

经验法则(应记录例外情况):

  • 初始化/设置时,首先运行超类的实现
  • 拆卸/清理时,最后运行超类的实现
  • 对于其他类别,通常需要首先运行超类的实现
注意实现中前两点的对称性。此外,在您运行超类实现之后,超类实现可能无法(正确)处理您的请求

详细说明
super
:对象存在于对象的层次结构中。超类是从中派生的对象。例如:

NSObject >
UIResponder >
UIViewController >
UICollectionViewController
假设
UICollectionViewController
已实现
-viewDidLoad
。它的实现将调用
super
的实现,以确保类层次结构中的所有实现都被执行。这类似于初始化——当在初始化器中调用超类的初始化器时,确保类层次结构中的所有初始化器都以正确的顺序执行。类似地,
-dealoc
以相反的顺序执行(在ARC中,编译器在执行实现后添加对
[super dealoc]
的调用)