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 异常