消息发送机制:使用了运行时,通过selector快速查找IMP的一个过程。
1、NSObject -> isa指针 对应着方法列表 method list
selectors 存放着 char * 对应 run1方法名称(字符串),整个是映射表。
objc_msgSend()这个是编译器的方式
[preson run] => objc_msgSend(person,SEL,@"10")
查找方式(一直往上找):
实例对象 isa-》类对象 isa-》元类 isa-》根元类 isa
isa指针是查找类的结构(ivar methods等等)
消息转发机制:IMP找不到的时候,通过一些方法做转发处理。
前提是定义了但是没有实现。
先走
NSObject里的
动态方法解析
+(BOOL)resolveClassMethod:(SEL)sel
+(BOOL)resolveInstanceMethod:(SEL)sel
再走
快速消息转发
forwardingTargetForSelector:(SEL)aSelector
最后走
标准消息转发
forwardInvocation:(NSInvocation *)aninvocation
methodSignatureForSelector:(SEL)aSelector