2

可能重复:
[super viewDidLoad] 约定

我在 UIViewController 中放入[super viewDidLoad]的位置有什么不同吗?viewDidLoad即,它应该在方法的开头(在我设置 UIViewController 的代码之前)还是在我设置 UIViewController 的代码之后),还是没有任何区别?

4

4 回答 4

7

你通常应该尽早打电话给 super 。否则,超类可能会干扰您自己的实现。假设UIViewController将在(它没有)中设置默认背景颜色viewDidLoad:如果您在方法中设置自己的背景颜色然后调用 super,它将被重置为默认颜色,这可能会导致混淆。

于 2011-05-17T16:06:11.840 回答
3

是的,一点没错。

//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 中进行所有释放 - 即首先摆脱所有混乱 - 否则就是泄漏时间。

于 2011-05-17T16:08:21.180 回答
2

你应该把它放在开头,这样你就可以覆盖它所做的任何事情(因为让我们面对它,这就是你首先要覆盖的原因)。或者换个角度来看,你不应该把它放在你的任何代码之后,以防它撤销你所做的任何事情。希望这对你有意义!

于 2011-05-17T16:05:04.387 回答
0

文档实际上并没有表明它是必需的,Apple 的几个示例代码项目(例如,iPhoneCoreDataRecipes)根本不调用[ super viewDidLoad ]。将此与 的文档进行比较,该文档-viewWillAppear:明确表示:

如果你重写了这个方法,你必须在你的实现中调用 super 。

也就是说,调用它并没有什么坏处。我的习惯是立即调用它,然后继续我的视图设置。

于 2011-05-17T16:08:58.160 回答