慈溪网站建设网站推广,网络规划设计师报考条件,wordpress播放pdf,石岩医院网站建设Objc的方法调用基于消息发送机制。即Objc中的方法调用#xff0c;在底层实际都是通过调用objc_msgSend方法向对象消息发送消息来实现的。在iOS中#xff0c; 实例对象的方法主要存储在类的方法列表中#xff0c;类方法则是主要存储在原类中。 向对象发送消息#xff0c;核心…Objc的方法调用基于消息发送机制。即Objc中的方法调用在底层实际都是通过调用objc_msgSend方法向对象消息发送消息来实现的。在iOS中 实例对象的方法主要存储在类的方法列表中类方法则是主要存储在原类中。 向对象发送消息核心就是找到对应的方法然后传入参数执行。 其具体过程是 确定class已经加载从cache中通过hash查找方法从类的方法列表中查找从父类中查找若方法列表是排序过的 则采用二分法查找若方法列表未排序则采用遍历查找。若找到方法执行之否则进入消息转发流程。 需要注意的是 向super对象发送消息调用的不是objc_msgSend方法。 NSLog(NSStringFromClass([self class])%,NSStringFromClass([self class]));
NSLog(NSStringFromClass([super class])%,NSStringFromClass([super class]));打印结果
NSStringFromClass([self class])BankViewController
NSStringFromClass([super class])BankViewController为什么 [super class]返回的也是BankViewController呢 这是因为 super结构体中的receiver指针其实指向的也是self只是向super发送消息调用的是objc_msgSendSuper方法该方法在执行消息传递时会调用查找自己类中的方法直接从父类开始查找。