[super viewWillAppear]做什么,什么时候需要?

时间:2010-07-27 21:36:12

标签: iphone objective-c cocoa-touch

-(void)viewWillAppear:(BOOL)animated{
//something here
[super viewWillAppear];
}

总是需要[super viewWillAppear];吗?如果不是何时以及为何使用它?

4 个答案:

答案 0 :(得分:51)

首先,正确的锅炉板应该是:

-(void)viewWillAppear:(BOOL)animated{
   [super viewWillAppear:animated];
   //something here
}

换句话说,首先致电super ,然后做自己的事情。您必须将animated参数传递给super

您通常希望在任何方法中首先调用超类的实现。在许多语言中都是必需的。在Objective-C中它不是,但如果你不把它放在方法的顶部,你很容易遇到麻烦。 (也就是说,我有时会打破这种模式。)

调用super's实施是否需要?对于这种特殊方法,如果不调用它,可能会出现意外行为(例如,如果您已经将UINavigationController子类化了)。所以答案是不是技术意义上的,但你应该总是这样做。

但是,在许多其他方法中,可能有充分理由不调用super

答案 1 :(得分:8)

调用super方法可以在父类中执行代码。

根据Apple doc

提出问题

enter image description here

所以,是的,这种方法是必需的。

答案 2 :(得分:3)

根据我的经验,在第一行调用[super viewWillAppear]时,在此之后调用reloadData时,无法在从详细视图返回时检索先前选定的行。当[super viewWillAppear]是最后一句时,您可以获取所选行并显示先前选择的行提示。只有在[tableView reloadData]内使用viewWillAppear时才会发生这种情况。

答案 3 :(得分:2)

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

这是父方法的样子:

代码:

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

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

代码: //从Parent继承

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

所以现在父母问候"你好",孩子问候"你好,妈咪"。稍后,如果我们改变父母的问候语只返回"嗨",那么这两个课程都会受到影响,你将会有#34;嗨"和"嗨,妈妈"。

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