ViewDidLoad / Unload消息到超级?

时间:2010-01-27 16:13:34

标签: objective-c cocoa-touch

我注意到其他来源的代码,其中作者尚未将消息添加到super,如下所示。我通常都会添加它们,但我只是好奇他们做了什么,我是否正确地总是添加它们?

-(void)viewDidLoad {
    //... other code
    [super viewDidLoad];
}

-(void)viewDidUnload {
    //... other code
    [super viewDidUnload];
}

加里

4 个答案:

答案 0 :(得分:4)

我建议始终将UIViewController个委托邮件发送至super(例如viewDidLoadviewDidAppear)。在某些情况下,如果你直接对UIViewController进行子类化,则没有必要。

某些课程,例如UITableViewController,要求子类执行此操作,如it is documented:“您可以覆盖loadView或任何其他超类方法,但如果确实要调用方法的超类实现,通常作为第一种方法呼叫“。

super的调用为超类提供了处理事件的机会(例如重新加载表数据,为取消选择按钮设置动画等)。

毋庸置疑,您不需要一个明确的方法,其唯一的工作是调用超级。

答案 1 :(得分:1)

这些方法的目的是在控制视图完成加载和完成卸载时通知控制器,以防控制器需要在那些“有趣的时刻”完成任务。

您所包含的代码基本上什么都不做:它将消息传递给超类实现,而不添加任何自己的处理。但是,如果完全省略该代码,那将会发生什么:消息将被传递到继承链中定义该方法实现的最低类。

答案 2 :(得分:0)

您不必使用空实现覆盖这些方法。当你需要用ivars做什么,停止通知观察等时覆盖它。 您的代码没有任何用处

答案 3 :(得分:0)

当你需要执行某种操作时,你应该只覆盖一个方法,所以我假设你的代码看起来像这样:

-(void)viewDidLoad {
    //do things that need to be done when the view is loaded
    [super viewDidLoad];
}

如果您认为父母的观点需要做某事,那么调用[super viewDidLoad];肯定是有序的。但是,如果您查看viewDidLoad的文档,则说明

  

此方法最常用于对从nib文件加载的视图执行其他初始化步骤

这里的“附加”这个词至关重要:它只是一种方便的方法。这与dealloc形成对比,其中文档明确指出当重写dealloc时,你必须始终调用[super dealloc]。

如果你的viewDidLoad和viewDidUnload的实现除了调用super之外什么都不做,你应该删除它们:除了为编译器做额外的工作之外,它们什么都不做。