消息转发:将消息转发给别人。
forwardingTargetForSelector:没有现实的话,默认就是返回nil
methodSignatureForSelector:没有现实的话,默认就是返回nil
返回nil的话,就不会来到forwardInvocation:方法了
forwardingTargetForSelector和methodSignatureForSelector没有现实跟返回nil
是一样的效果
源码
anInvocation.target 开始是以前的方法调用者
经典错误
forwardInvocation里面可以不做任何事情
此时在用2去取参数会数组越界
methodSignatureForSelector:(SEL)aSelector 返回什么样的方法签名,
方法编码/函数的编码(方法参数有多少个,由方法签名决定的)方法签名决定着anIvocation
forwardInvocation:(NSInvocation *)anNvocation 里面,anNvocation里面的方法签名就是什么
anInvocation最开始包含的信息,调用了[anInvocation invokeWithTarget:[MJCat alloc] init]方法后 anInvocation.target 就变成了MJCat对象
前提是MJCat 有这个test方法
类方法进行消息转发的时候,不用减号开头的forwardingTargetForSelector方法
注意图中的receiver(消息接收者)
类方法的消息转发
下图调用的减号开头的方法
网友评论