ios c语言调用oc方法,ios-面试-OC 方法调用的过程原理

OC中的所有方法调用,最终都是转换成runtime中的一个C语言消息分发函数:objc_msgSend(消息接收者,方法名 ,参数。。。)

这条消息发送之后,系统会在receiver的类对象的方法列表中找这个方法,如果没找到,再到receiver的父类的方法列表中找,如此直到根类至找到为止,如果还没有找到会报出错误。

(缓存:方法第一次被调用之后,方法会被存入一张缓存表,之后如果再被调用时就直接从缓存表中取出,以提高效率)。

Runtime中对调用过程做了缓存,在抛出错误之前会进行动态决议和消息转发过程。

若对象无法响应某个选择子,则进入消息转发流程:

1、动态方法解析:+(bool) resolveInstanceMethod:(SEL)selector

+(bool) resolvelassMethod:(SEL)selector

2、备用接受者:

(id)forwardingargetForSelector(SEL)slector  (把这条消息转发给其他对象处理)

获取方法签名进行消息转发

- (NSMethodSignature*)methodSignatureForSelector:

完整的消息转发

- (void)forwardingInvocation(NSInvocation*)invocateion

1、通过运行期的动态方法解析功能,我们可以在需要某个方法是在将其加入类中

2、对象可以把其无法解读的某些消息转交给其他对象来处理

3、经过上述两步后,如果还是没有办法处理消息,那就启动完整的消息转发机制

你可能感兴趣的:(ios,c语言调用oc方法)