ios消息转发机制

动态方法解析:

void method(id self, SEL _cmd, NSString *mes){

    NSLog(@"实现方法");

}

+ (BOOL)resolveInstanceMethod:(SEL)sel {

    if ([NSStringFromSelector(sel) isEqualToString:@"method"]) {

        returnclass_addMethod(self, sel, (IMP)method,"v@:@");

    }

    return NO;

}

快速转发:

- (id)forwardingTargetForSelector:(SEL)aSelector {

    if ([NSStringFromSelector(aSelector) isEqualToString:@"method"]) {

        //需要转发的类

        return[NewClass new];

    }

    return [super forwardingTargetForSelector:aSelector];

}

慢速转发:

方法签名:

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

    if ([NSStringFromSelector(aSelector) isEqualToString:@"method"]) {

        return [NSMethodSignature signatureWithObjCTypes:"v@:@"];

    }

    return [super methodSignatureForSelector:aSelector];

}

消息转发:

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

    SELsel = [anInvocationselector];

    NewClass *newClass = [NewClass new];

    if([newClass respondsToSelector:sel]) {

        [anInvocationinvokeWithTarget:newClass];

    }

    [superforwardInvocation:anInvocation];

}

- (void)doesNotRecognizeSelector:(SEL)aSelector {

    //防止找不到方法崩溃

    NSLog(@"找不到方法");

}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.动态方法解析 对象在收到无法处理的消息时,会调用下面的方法,前者是调用类方法时会调用,后者是调用对象方法时会调...
    蒲公英_阅读 3,025评论 0 0
  • 消息转发机制 假设说我们声明一个类, 初始化对象, 并且在此类声明一个方法, 调用方法的时候底层是怎么处理的呢? ...
    软件iOS开发阅读 1,839评论 0 0
  • 在OC中,函数的执行,本质是消息发送。 所有的函数调用转化为C函数即obj_msgSend(id,sel,para...
    北你妹的风阅读 1,488评论 0 0
  • 1、动态方法解析 对象在收到无法处理的消息时,会调用下面的方法,前者是调用类方法时会调用,后者是调用对象方法时会调...
    Colin_狂奔的蚂蚁阅读 3,077评论 1 3
  • 以前知道苹果执行方法是通过消息执行的,当对应的对象或者类无法处理该消息时,苹果就会启动消息转发机制,通过这一机制,...
    海浪萌物阅读 3,297评论 0 0