Runtime底层解析 -消息机制 :objc_msgSend()(三)

objc_msgSend()实现

3. 消息转发:__forwarding__
  • 这个阶段代码没有开源,这里有一份国外整理的伪代码(提取码: du9w).
    Runtime底层解析 -消息机制 :objc_msgSend()(三)_第1张图片

  • 以下方法都有实例方法、类方法两个版本。
- (id)forwardingTargetForSelector:(SEL)aSelector
{
    if (aSelector == @selector(test)) {
        // objc_msgSend([[Cat alloc] init], aSelector)
        return [[Cat alloc] init];
    }
    return [super forwardingTargetForSelector:aSelector];
}

 //方法签名:返回值类型、参数类型
- (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector
{
    if (aSelector == @selector(test)) {
        return [NSMethodSignature signatureWithObjCTypes:"v@:"];
    }
    return [super methodSignatureForSelector:aSelector];
}

/**NSInvocation封装了一个方法调用,包括:方法调用者、方法名、方法参数
    anInvocation.target 方法调用者
    anInvocation.selector 方法名
    [anInvocation getArgument:NULL atIndex:0] 
*/
- (void)forwardInvocation:(NSInvocation *)anInvocation
{
    [anInvocation invokeWithTarget:[[Cat alloc] init]];
}

你可能感兴趣的:(Runtime底层解析 -消息机制 :objc_msgSend()(三))