美文网首页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