Messaging
向一个实例发消息,runtime使用的是objc_msgSend函数来发送的。
每一个class都有一个指针指向他的super class,有一个 dispatch table,指向每个方法的地址。
每一个实例(来自NSObject or NSProxy)都有一个指针isa,指向他的class.
runtime通过向上回溯直到找到调用的方法,然后执行。
执行的方法中会传入两个隐藏参数
self: message receiver
_cmd: 当前方法的selector
动态添加一个方法
resolveInstanceMethod可以动态添加实例方法,resolveClassMethod可以动态添加类方法
动态加载
NSBundle
消息转发
如果实现了forwardInvocation, 则当想对象发送一个不存在的消息时候,会调用此接口,可以在这里将消息转发到其他对象来处理。
时间: 2024-11-12 15:30:20