iOS objc_msgSend消息发送机制

2018-10-17  本文已影响27人  咖啡豆8888

前言:

objc_msgSend流程图.png

OC的消息机制 objc_msgSend(消息接受者,消息名称)

  1. OC中方法的调用,其实都是转换为objc_msgSend函数的调用。
  2. objc_msgSend的执行流程可以分为3个阶段
//消息转发
- (id)forwardingTargetForSelector:(SEL)aSelector {
    if (aSelector == @selector(test)) {
        //消息转发 不为空直接调用
//        return [JWCat new];
        //为空
        return nil;
    }
    return [super forwardingTargetForSelector:aSelector];
}
//消息转发为空
- (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector {
    if (aSelector == @selector(test)) {
        //v16@0:8  返回值为空 viod  默认 self 跟_cmd两个参数 16个字节
        return [NSMethodSignature signatureWithObjCTypes:"v16@0:8"];
    }
    return [super methodSignatureForSelector:aSelector];
}
- (void)forwardInvocation:(NSInvocation *)anInvocation {
    //包装NSMethodSignature 签名的一个地方
    [anInvocation invokeWithTarget:[JWCat new]];
}

以上3个阶段都没有找到,会报错unrecognized selector sent to instance

上一篇 下一篇

猜你喜欢

热点阅读