Iphone 将[super viewDidLoad]放在我的UIViewController中的位置会有区别吗?

Iphone 将[super viewDidLoad]放在我的UIViewController中的位置会有区别吗?,iphone,ios,uiviewcontroller,viewdidload,Iphone,Ios,Uiviewcontroller,Viewdidload,可能重复: 我在UIViewController中的viewDidLoad中放置[super-viewDidLoad]的位置是否会有所不同?也就是说,它应该放在方法的开头(在我设置UIViewController的代码之前)还是结尾(在我设置UIViewController的代码之后),还是没有任何区别?你应该把它放在开头,这样你就可以覆盖它所做的任何事情(因为让我们面对它,这就是为什么你首先要覆盖它的原因). 或者换一种方式来看,你不应该把它放在你的任何代码之后,以防它破坏你所做的任何事情。

可能重复:


我在UIViewController中的
viewDidLoad
中放置
[super-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 dealoc]之前,也要在dealoc中发布所有内容,即首先清除所有的混乱,否则就是泄漏时间。

文档中实际上没有指出这是必需的,苹果的一些示例代码项目(例如iPhoneCoreDataRecipes)根本不调用
[super viewDidLoad]
。将此与
-viewwillbeen:
的文档进行比较,其中明确指出:

如果重写此方法,则必须在实现中的某个点调用super


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

长话短说,在第一行使用它,对吗?“文档实际上没有指出它是必需的”。。。然后你发布了苹果文档的摘录,要求实现者在实现的某个时候调用super。。。?总之,长话短说,你绝对应该这样称呼它,因为你不知道你继承的这些类的幕后发生了什么。