首页 > 试题广场 >

objc_msgSend和_objc_msgForward这

[问答题]
objc_msgSend和_objc_msgForward这两个函数是用来做什么的?需要注意什么?一般在什么领域会用到他们俩?
1. objc_msgSend

objc_msgSend 是 Objective-C 消息系统的入口,它是使用汇编实现的,所有 Objective-C 的消息都会转换成使用 objc_msgSend 来进行消息发送。一般不会直接使用 objc_msgSend 来进行方法调用,实际情况下也较少用到。

2. _objc_msgForward

_objc_msgForward 是消息转发的入口,它也是使用汇编实现的。当在方法查找(loopUpImpOrForward)时,没有查找到对应 Selector 的方法的 IMP 并且动态消息解析 (resolveInstanceMethod/resolveClassMethod) 失败的时候会返回 _objc_msgForward,代表需要进行消息转发。通过把方法的实现指向 _objc_msgForward,可以使方法直接进行消息转发,例如 Aspect 是使用使用此技术来使 hook 的方法都进入消息转发,然后在 forwardInvocation 中来执行 AOP 部分的逻辑。JSPatch 同样也是此方式来动态的修改原方法的实现。
发表于 2020-03-28 21:32:22 回复(0)
obj_msgSend是发送消息
obj_msgForward是转发消息 
发表于 2020-03-28 15:06:57 回复(0)