【iOS】消息传递机制和消息转发机制

在Objective-C中,方法的调用理解为对象接受消息。

运行时调用的方法告诉对象要干什么,给对象传递一个消息。发送消息后,编译器将其转换为对应的一条C语言消息发送原语

void objc_msgSend( id self , SEL cmd , ... )

第一个参数代表消息的接收者,第二个参数代表消息选择子。

objc_msgSend通过接收者的isa指针在接收者类对象的方法列表中找,名称为选择子的方法。找到则执行,否则就到父类中查找,都找不到说明接收者无法响应改消息,触发消息转发机制。

消息转发机制有三道防线,任何一道起作用都可以传递消息。按照先后顺序依次为:

1、动态补加方法

+ (BOOL)resolveInstanceMethod:(SEL)sel

+ (BOOL)resolveClassMethod:(SEL)sel

2、直接返回消息给另一个对象处理

- (id)forwardingTargetForSelector:(SEL)aSelector

3、手动生成签名方法并抓发给另一个对象

- (NSMethodSignature *)methodSignatureForSelector:(SEL)sSelector

- (void)forwardInvocation:(NSInvocation *)anInvocation

你可能感兴趣的:(【iOS】消息传递机制和消息转发机制)