可能重复:
[super viewDidLoad] 约定
我在 UIViewController 中放入[super viewDidLoad]
的位置有什么不同吗?viewDidLoad
即,它应该在方法的开头(在我设置 UIViewController 的代码之前)还是在我设置 UIViewController 的代码之后),还是没有任何区别?
可能重复:
[super viewDidLoad] 约定
我在 UIViewController 中放入[super viewDidLoad]
的位置有什么不同吗?viewDidLoad
即,它应该在方法的开头(在我设置 UIViewController 的代码之前)还是在我设置 UIViewController 的代码之后),还是没有任何区别?
你通常应该尽早打电话给 super 。否则,超类可能会干扰您自己的实现。假设UIViewController
将在(它没有)中设置默认背景颜色viewDidLoad
:如果您在方法中设置自己的背景颜色然后调用 super,它将被重置为默认颜色,这可能会导致混淆。
是的,一点没错。
//superclass
-(void)viewDidLoad {
self.ivar = 4;
}
//subclass
-(void)viewDidLoad {
[super viewDidLoad];
self.ivar = 5;
}
//alternative subclass
-(void)viewDidLoad {
self.ivar = 5;
[super viewDidLoad];
}
这个例子很简单,但显示了两个子类都继承自同一个超类;其中一个在加载后将它的 ivar 设置为 4,另一个将它的 ivar 设置为 5。
我尽量坚持 idz 上面所说的,总是先调用 [super viewDidLoad];在调用 [super dealloc] 之前,还要在 dealloc 中进行所有释放 - 即首先摆脱所有混乱 - 否则就是泄漏时间。
你应该把它放在开头,这样你就可以覆盖它所做的任何事情(因为让我们面对它,这就是你首先要覆盖的原因)。或者换个角度来看,你不应该把它放在你的任何代码之后,以防它撤销你所做的任何事情。希望这对你有意义!
文档实际上并没有表明它是必需的,Apple 的几个示例代码项目(例如,iPhoneCoreDataRecipes)根本不调用[ super viewDidLoad ]
。将此与 的文档进行比较,该文档-viewWillAppear:
明确表示:
如果你重写了这个方法,你必须在你的实现中调用 super 。
也就是说,调用它并没有什么坏处。我的习惯是立即调用它,然后继续我的视图设置。