美文网首页selector
iOS 使用_objc_msgForward直接进入消息转发流程

iOS 使用_objc_msgForward直接进入消息转发流程

作者: 落夏简叶 | 来源:发表于2020-05-23 19:40 被阅读0次

    导读:一般调用一个实例方法,会先找缓存,再到类找方法的实现,找到就会调用。那么如何在有方法的实现的情况下,如何让其直接进入消息转发流程?

    Demo:

    1. XXPerson,提供一个打印名字的方法。
    - (void)printName {
        NSLog(@"My name is Luo.");
    }
    
    - (id)forwardingTargetForSelector:(SEL)aSelector {
        if ([NSStringFromSelector(aSelector) isEqualToString:@"printName"]) {
            return [[XXLuo alloc] init];
        }
        
        return nil;
    }
    
    1. XXLuo,提供一个打印名字的方法(注意这里的名字和上面方法的名字有区别),此方法用于消息转发。
    - (void)printName {
        NSLog(@"My name is LuoXia.");
    }
    
    1. 调用 _objc_msgForward可直接进入消息转发流程,即使有方法的实现。
    - (void)viewDidLoad {
        [super viewDidLoad];
        
        XXPerson *luo = [[XXPerson alloc] init];
        [luo printName];
    //_objc_msgForward直接进入消息转发流程
        ((void(*)(id, SEL))_objc_msgForward)((id) luo, @selector(printName));
    }
    
    • [luo printName] // My name is Luo.
    • _objc_msgForward:// My name is LuoXia.


      image.png

    相关文章

      网友评论

        本文标题:iOS 使用_objc_msgForward直接进入消息转发流程

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