`[super viewDidLoad]`惯例

时间:2009-05-09 22:21:11

标签: iphone objective-c cocoa cocoa-touch

在实现之前和实现之后,我看到了一些带有[super viewDidLoad]的示例代码。

我知道你并不总是打电话给超级(如许多其他讨论中所见)。 当你打电话给它时,是否需要在你编码之前或之后?

这可能会产生影响,具体取决于超级实施的功能。虽然你不应该知道超级的实现来写你的。

当然这适用于所有UIViewControllers委托方法(willAppear,didAppear等...)

有什么想法吗?

2 个答案:

答案 0 :(得分:97)

我的经验法则是:如果您正在做与初始化相关的事情,请首先调用超类的方法(如果您要调用它)。这使得超类有机会进行您可能在以后的方法中依赖的任何设置。如果你正在做与破坏相关的事情,最后调用超类的方法。这样可以确保在整个方法执行过程中可以依赖对象的状态。最后,根据具体情况采取任何其他案例。例如,如果你正在处理一个事件,你可能想先处理这个事件,如果你选择不处理这个事件,或者你以某种方式改变它并希望在事件中传递它,那么只调用超类的方法。链

答案 1 :(得分:0)

假设您有2个班级,父母和孩子。子继承自Parent。他们有一个名为greet的方法,它返回一个字符串。

这是父方法的样子:

代码:

-(NSString *)greet {
 return @"Hello";
}

我们希望孩子向父母学习。所以我们用super来说问妈妈会怎么问候,但也有我们自己的小补充。

代码://从父级继承

-(NSString *)greet {
NSString *parentGreeting = [super greet];
return [parentGreeting stringByAppendingString:@", Mommy"]
}

所以现在父母问候“你好”,儿童问候“你好,妈妈”。稍后,如果我们改变父母的问候语只返回“嗨”,那么这两个课程都会受到影响,你会有“嗨”和“嗨,妈妈”。

super用于调用超类定义的方法。它用于访问已被子类覆盖的方法,以便类可以将其自己的代码包装在其父类实现的方法周围。如果你正在进行任何类型的继承,这非常方便。