Runtime 学习之消息转发
接受消息的对象没有实现相应的方法,runtime 会发生消息转发机制。
resolveInstanceMethod:(SEL)sel
动态为该对象添加方法实现。
目的:方法A的实现是运行时判断到底执行方法a,还是方法b,一旦确定之后,方法A的实现就确定了,以后再调用方法A时实际是调用方法a或方法b。那么我们就没有必要实现方法A,每次都再重定位到方法a或方法b,我们可以直接用方法a或方法b的 IMP 替换 方法A的 IMP。
返回 NO,进入下一步
forwardTargetForSelector:(SEL)aSelector
将消息转发给另一个对象。
目的:变相实现了类的多继承。
返回 nil,进入下一步
methodSignatureForSelector(SEL)aSelector
返回 nil,抛出异常
forwardInvocation:(NSInvocation *)invocation
和 forwardTargetForSelector 类似,将消息转发给另一个对象
doesNotRecognizeSelector:(SEL)aSelector
抛出 unrecognized selector 异常
本文围绕Runtime消息转发机制展开,当接受消息的对象未实现相应方法时,runtime会触发该机制。介绍了resolveInstanceMethod、forwardTargetForSelector等方法的作用,如动态添加方法实现、将消息转发给其他对象等,还提及了NSInvocation相关小知识。

被折叠的 条评论
为什么被折叠?



