我正在学习objective-c教程,并注意到viewDidLoad中的代码放在超级viewDidLoad下,而不是第一次调用viewDidLoad。
把代码放在viewDidLoad和超级viewDidLoad下有什么区别?
我知道调用super就是调用父类,但不确定在这个上下文中是什么。
感谢大家在这方面的帮助。
发布于 2014-11-26 01:46:17
iOS中的标准做法是在超类完成其所需的设置(初始化属性、布局等)之后,完成所有子类的设置。如果您在开始更改之前没有给超类一个机会来处理它的所有设置,那么您可能会遇到一些奇怪的bug和行为。
发布于 2014-11-26 04:05:25
把代码放在viewDidLoad下和超级viewDidLoad下有什么区别?
执行顺序。您的实现将在超类实现运行后执行。有些实现什么也不做(细节应该抽象),但调用它们并不会有什么坏处(异常应该记录在案)。
如果您正在寻找特定的差异,那么根据类层次结构的不同,可能会有很大的差异。您应该忽略这些实现细节。可以说,在超类实现执行之前,超类实现可能没有准备好处理您的初始化。
经验法则(异常情况应记录在案):
注意实现中前两点的对称性。此外,在您运行超类实现之后,超类实现可能无法(正确地)处理您的请求。
Detailing super:您的对象存在于对象的层次结构中。超类是您从中派生的对象。示例:
NSObject >
UIResponder >
UIViewController >
UICollectionViewController假设UICollectionViewController实现了-viewDidLoad。它的实现将调用super的实现,以确保类层次结构中的所有实现都被执行。这类似于初始化--当在初始化器中调用超类的初始化器时,确保类层次结构中的所有初始化器都以正确的顺序执行。类似地,-dealloc以相反的顺序执行(在ARC中,编译器在您的实现执行之后添加对[super dealloc]的调用)。
https://stackoverflow.com/questions/27133013
复制相似问题