将[super viewDidLoad]放在我的UIViewController中会有什么不同吗?

时间:2011-05-17 15:56:29

标签: iphone ios uiviewcontroller viewdidload

  

可能重复:
  [super viewDidLoad] convention

我将[super viewDidLoad]置于我的UIViewController中的viewDidLoad之内会有所不同吗?即,它应该在我设置UIViewController的代码之后(在我的代码设置UIViewController之前)还是结束之后,或者它没有任何区别?

4 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分: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中释放所有内容 - 即首先清除所有混乱 - 否则就是泄漏时间。

答案 2 :(得分:2)

你应该把它放在开头,以便你可以覆盖它做的任何事情(因为让我们面对它,这就是你首先要覆盖的原因)。或者以另一种方式看待它,你不应该把它放在你的任何代码之后,以防它撤消你做的任何事情。希望这对你有意义!

答案 3 :(得分:0)

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

  

如果覆盖此方法,则必须在实施中的某个时刻调用super。

那就是说,称之为没有坏处。我的习惯是立即调用它,然后继续我的视图设置。