消息转发

objc在向一个对象发送消息时,runtime库会根据对象的isa指针找到该对象实际所属的类,然后在该类中的方法列表以及其父类方法列表中寻找方法运行,然后在发送消息的时候,objc_msgSend方法不会返回值,所谓的返回内容都是具体调用时执行的

1 如果没有实现方法

第一步调用以下方法

+ (BOOL)resolveInstanceMethod:(SEL)sel{

    if(sel ==@selector(test)) {

添加方法

        class_addMethod(<#Class  _Nullable __unsafe_unretained cls#>, <#SEL  _Nonnull name#>, <#IMP  _Nonnull imp#>, <#const char * _Nullable types#>)

        returnYES;

    }

    return [super resolveInstanceMethod:sel];

}

2 如果上面的方法没有实现 ,就调用下面的方法

- (id)forwardingTargetForSelector:(SEL)aSelector{

    if(aSelector ==@selector(test)) {

        return[[WEIalloc]init];

    }

    return [super forwardingTargetForSelector:aSelector];


}

3 如果上面的方法没有实现 ,就调用下面的两个方法

- (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector{

    if(aSelector ==@selector(test)) {

        return [NSMethodSignature signatureWithObjCTypes:@"v16@:8"];

    }

    return [super methodSignatureForSelector:aSelector];

}

- (void)forwardInvocation:(NSInvocation*)anInvocation{

    anInvocation.target= [[WEialloc]init];

    [anInvocationinvoke];

}

- (void)doesNotRecognizeSelector:

你可能感兴趣的:(消息转发)