super 调用 objc_msgSendSuper 告诉系统
去父类方法列表里面去找,但是调用者主体还是 self
和 self 的区别只是不在本类 的方法列表中查找
经常写的代码 如下
- (instancetype)initWithFrame:(CGRect)frame{
self = [super initWithFrame:frame];
if (self) {
count = 0;
NSLog(@"%@",NSStringFromClass([self class]));
NSLog(@"%@",NSStringFromClass([super class]));
}
return self;
}
super 的含义,消息转发会调用 objc_msgSendSuper
, 就是 去父类的方法列表中找到 initWithFrame:
这个方法,然后调用,调用的主体是 self。super
只是一个编译器的特殊字符,并不代表父类的一个实例化对象。这也就能明白为什么 调用 [super initWithFrame:frame]
能得到本类的 实例化对象了,而不是父类的对象了。
[self class]
[super class]
,class
这个方法都是 在 NSObject 对象中找到的,所以 都相当于 调用 [self class]
, 输入都是 一样的 SubView
网友评论