美文网首页
消息机制(消息发送、动态解析、消息重定向)

消息机制(消息发送、动态解析、消息重定向)

作者: 寂寞先森666 | 来源:发表于2020-07-27 11:41 被阅读0次

第一步、消息发送

#import <objc/message.h>

    // 创建person对象
    person *p = [[person alloc] init];

    // 调用对象方法
    [p eat];

    // 本质:让对象发送消息(对象方法)
    objc_msgSend(p, @selector(eat));

    // 本质:让类对象发送消息(类方法)
    objc_msgSend([person class], @selector(sleep));

第二步、动态解析

第三步、消息重定向

屏幕快照 2020-07-27 上午11.37.52.png
- (void)viewDidLoad {

    [super viewDidLoad];

    [self performSelector:@selector(eat)];

}

/***第一次、动态解析***/
+(BOOL)resolveInstanceMethod:(SEL)sel
{

//    if (sel == @selector(eat)) {

//        class_addMethod([self class], sel, (IMP)funMethod, "v@:");

//    }

    return YES;

}

void funMethod(id obj,SEL _cmd) {

    NSLog(@"funMethod"); //新的 fun 函数

}

/***第二次、接受者消息重定向***/
- (id)forwardingTargetForSelector:(SEL) aSelector
{

//    if (aSelector == @selector(eat)) {

//        person * p = [[person alloc]init];

//        return p;

//    }

    return nil;

}

/***第三次、获取函数的参数和返回值类型,返回签名***/
- (NSMethodSignature*)methodSignatureForSelector:(SEL)aSelector {
    if ([NSStringFromSelector(aSelector) isEqualToString:@"eat"]) {

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

    }

    return [super methodSignatureForSelector:aSelector];

}

/***第三次、消息重定向***/
- (void)forwardInvocation:(NSInvocation*)anInvocation {
    SEL sel = anInvocation.selector;  // 从 anInvocation 中获取消息

    person * p = [[person alloc]init];

    if([p respondsToSelector:sel]) {  // 判断 Person 对象方法是否可以响应 sel

        [anInvocation invokeWithTarget:p];  // 若可以响应,则将消息转发给其他对象处理

    }else{

        [self doesNotRecognizeSelector:sel];  // 若仍然无法响应,则报错:找不到响应方法

    }

}

@end

相关文章

  • 消息机制(消息发送、动态解析、消息重定向)

    第一步、消息发送 第二步、动态解析 第三步、消息重定向

  • 08.Objective-C 消息机制

    问题 消息机制的三个阶段 1.消息机制发送消息阶段-消息发送2.消息机制动态方法解析阶段 -动态解析3.消息机制消...

  • runtime 消息机制简析

    runtime 消息机制消息机制可以简单分为三个方面:消息发送、动态方法解析、消息转发一.消息发送oc 中所有的方...

  • OC中如何避开消息机制

    OC中的消息机制可概括为三步: 消息发送。 动态解析。 消息转发。 由于消息机制objc_msgSend()方法调...

  • IOS消息传递机制

    ios的消息传递机制分为三个阶段:消息发送阶段,动态解析阶段,消息转发阶段。 消息发送阶段: 当ios的对象调用方...

  • Runtime:消息发送机制、动态方法解析、消息转发机制

    一、消息发送机制objc_msgSend二、动态方法解析resolveMethod三、消息转发机制objc_msg...

  • Runtime(二)

    objc_msgSend 包括以下三个步骤 消息发送 动态方法解析 消息转发 消息发送 动态方法解析 消息转发 如...

  • iOS设计模式 (八) 代理模式消息机制

    消息机制 上图我们可以看出iOS消息机制是分三步, 动态方法解析,消息转发重定向,生成方法签名以及方法的签名派发来...

  • 消息机制

    消息机制流程 消息发送 动态方法解析 消息转发image.png 动态方法解析 如果在当前类,父类都没有找到该方法...

  • iOS 底层原理 - 消息转发

    在上一篇 iOS 底层原理 - 消息查找流程中,我们知道OC消息机制分为三个阶段,消息发送,动态解析和消息转发,如...

网友评论

      本文标题:消息机制(消息发送、动态解析、消息重定向)

      本文链接:https://www.haomeiwen.com/subject/rhqzlktx.html