-(void)viewWillAppear:(BOOL)animated{
//something here
[super viewWillAppear];
}
[super viewWillAppear];
总是必需的吗?如果没有,您何时以及为何使用它?
首先,正确的样板应该是:
-(void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
//something here
}
换句话说,先打电话
super
,然后做你自己的事情。并且您必须将 animated
参数传递给 super
。
您通常希望在任何方法中首先调用超类的实现。在许多语言中,这是必需的。在 Objective-C 中则不然,但如果您不将其放在方法的顶部,您很容易遇到麻烦。 (也就是说,我有时会打破这种模式。)
调用
super's
实现是否必需?在这种特定方法的情况下,如果您不调用它,您可能会得到意想不到的行为(特别是如果您已经子类化了 UINavigationController
)。所以答案是“不”,不是从技术意义上来说,但你可能应该总是这样做。
但是,在许多其他方法中,可能有充分的理由不调用 super
。
[super viewWillAppear]
,之后再调用
reloadData
,使得从详细视图返回时无法检索先前选择的行。当[super viewWillAppear]
为最后一句时,可以获取选中的行,并显示之前选中的行提示。仅当在 [tableView reloadData]
内使用 viewWillAppear
时才会发生这种情况。这是父方法的样子:
代码:
-(NSString *)greet {
return @"Hello";
}
我们希望孩子向父母学习。所以我们用 super 来表达妈妈会打招呼的方式,但也有我们自己的一些补充。
代码: // 继承自父级
-(NSString *)greet {
NSString *parentGreeting = [super greet];
return [parentGreeting stringByAppendingString:@", Mommy"]
}
所以现在家长打招呼“你好”,孩子打招呼“你好,妈妈”。稍后,如果我们将家长的问候语更改为仅返回“Hi”,那么两个班级都会受到影响,并且您将得到“Hi”和“Hi, Mommy”。
super 用于调用超类定义的方法。它用于访问已被子类重写的方法,以便该类可以将自己的代码包装在其父类实现的方法周围。如果您正在进行任何类型的继承,这非常方便。
默认实现为空 | 致电超级 | 拨打超级帖子 | |
---|---|---|---|
虽然此方法的默认实现不执行任何操作,但许多 UIKit 类提供非空实现。 | 您 | 在您自己的 awakeFromNib 方法期间随时调用超级实现 在任何时候 |
默认实现为空 | 致电超级 | 拨打超级帖子 | |
---|---|---|---|
不 | 一定不能 | 没有提及 | |
没有提及 | 没有提及 | 没有提及 | |
没有提及 | 必须 | 在某个时刻 | |
没有提及 | 需要 | 在某个时刻 | |
没有提及 | 必须 | 在某个时刻 | |
没有提及 | 必须 | 在某个时刻 | |
没有提及 | 必须 | 在某个时刻 |
默认实现为空 | 致电超级 | 拨打超级帖子 | |
---|---|---|---|
不 | 是的 | 最后一步 | |
是的 | 没有提及 | 没有提及 | |
是的 | 没有提及 | 没有提及 |