打电话给超级问题

时间:2011-05-04 23:02:43

标签: objective-c ios oop class

我想知道在这种类层次结构

的情况下会发生什么
MySuperClass : UIViewController

MYSubClass : MySuperClass

MySuperClass缺少方法ViewWillAppear

我的问题是:如果MySubClass有以下方法

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

是简单地忽略了代码(不会被执行),还是会调用UIViewController中的viewWillAppear?

只是想知道。

2 个答案:

答案 0 :(得分:3)

它与普通方法调用类似。当你调用super时,运行时会通过超类链上升,直到找到实现所请求方法的那个。如果找不到,则会调用转发方法,如果方法未转发,则会调用doesNotRecognizeSelector:。所以,是的,将在UIViewController类上调用viewWillAppear

答案 1 :(得分:0)

说你有:

MySubClass *mySubController = [[MySubClass alloc] initWithNibNamed:nil bundle:nil];

如果你对mySubController做了一些会导致其视图出现的东西,比如将它推到导航控制器的堆栈上,那么将调用MySubClass的-viewWillAppear实现。就像现在一样,该实现只是调用super的实现。由于MySuperClass不会覆盖-viewWillAppear,因此将调用UIViewController的实现。