Objective-c self super 的区别

在OC中编写代码,我们经常看见self super这些关键字,从字面的意思我们可以将 self 和 super理解为 自身 和 超级

一、self super 概念?

self super 都是OC中系统保留关键字
self是OC中的一个隐含参数 ,super 是一个预编译指令

[self class] [super class]打印出来的结果都是一致

1.1 self
动态方法中 “self” 指当前对象
静态方法中 “self” 指当前类
self 调用当前对象或者类的方法 (self代表当前方法的调用者)
self 是一个指针

1.2 super
super是一个预编译指令,并不是系统隐藏参数
super 是去父类开始查找


二、self super 运行原理


self

self 调用一个方法时,会从当前类的方法中开始查找,并运行,如果没有找到,则从父类中开始查找,直到找到方法并运行,
self调用方法时,会使用objc_msgSend函数
id objc_msgSend(id theReceiver,SEL theSelector,…)
第一个参数是消息接收者,第二个参数是具体的调用方法,后边的 是可变参数

super

当系统执行super时候,编译器会自动转换为 objc_msgSendSuper函数
id objc_msgSendSuper(struct objc_super *super,SEL op ,…)
struct objc_super {
id receiver;
Class superClass;
};
[super init ]
super执行方式
1 构建objc_super结构体, receiver参数代表当前执行类 self,第二个参数 superClass指父类
2 从superClass类开始查找方法列表,直到找到方法,最后返回 objc_super.receiver