这是一个自定义view:
@implementation MyView
- (instancetype)init {
if (self = [super init]) {
NSLog(@"调用了init");
}
return self;
}
- (instancetype)initWithFrame:(CGRect)frame {
if (self = [super initWithFrame:frame]) {
NSLog(@"调用了initWithFrame");
}
return self;
}
@end
现在我调用它的init方法:
MyView *myView = [[MyView alloc] init];
控制台打印信息是:
2017-10-09 11:14:35.224 block[2391:262544] 调用了initWithFrame
2017-10-09 11:14:35.225 block[2391:262544] 调用了init
问:
为什么先打印的是initWithFrame而不是init?
代码调用过程如下:
关键点:OC 里面的 super 实际上是让某个类自己去调用父类的方法, 而不是父类去调用某方法。方法动态调用过程中的顺序是按照继承关系从下到上。