美文网首页
NSInvocation 入门

NSInvocation 入门

作者: 本本的开心牧场 | 来源:发表于2018-07-15 14:40 被阅读0次

最近在开源项目中看到NSInvocation这个类,赶紧充电

调研了一下,发现在iOS开发中,可以直接调用方法(SEL)的方式有两种performSelector:withObject:NSInvocation
但是前者只能传一个参数,
NSInvocation是一个消息调用类,它包含了所有OC消息的成分:targetselector、参数以及返回值。NSInvocation可以将消息转换成一个对象,消息的每一个参数能够直接设定,而且当一个NSInvocation对象调度时返回值是可以自己设定的。一个NSInvocation对象能够重复的调度不同的目标(target),而且它的selector也能够设置为另外一个方法签名。NSInvocation遵守NSCoding协议,但是仅支持NSPortCoder编码,不支持归档型操作。

给你一段代码,自己体会

- (void)viewDidLoad {
    [super viewDidLoad];
    UIButton *btn = [[UIButton alloc] initWithFrame:CGRectMake(100, 100, 80, 45)];
    UIButton *btn2 = [[UIButton alloc] initWithFrame:CGRectMake(100, 200, 80, 45)];
    
    [self.view addSubview:btn];
    [self.view addSubview:btn2];
    

    SEL method = @selector(setBackgroundColor:);
    //创建一个函数签名,这个签名可以是任意的,但需要注意,签名函数的参数数量要和调用的一致。
//    NSMethodSignature *sig = [UIButton instanceMethodSignatureForSelector:method];
    //通过签名初始化
//    NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:sig];
    NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:[UIButton instanceMethodSignatureForSelector:method]];
    [invocation setSelector:method];

    UIColor *color = [UIColor blueColor];
//    传参
//    这里设置参数的Index 需要从2开始,因为前两个被selector和target占用
    [invocation setArgument:&color atIndex:2];
//    //设置 调用对象
    [invocation invokeWithTarget:btn];
    [invocation invokeWithTarget:btn2];
    
}

相关文章

  • NSInvocation 入门

    最近在开源项目中看到NSInvocation这个类,赶紧充电 调研了一下,发现在iOS开发中,可以直接调用方法(S...

  • BlocksKit A2DynamicDelegate研究

    NSInvocation @interface NSInvocation:NSObject 通过方法签名获得NSI...

  • NSInvocation如何调用block

    NSInvocation如何调用block 同步发布到博客地址NSInvocation如何调用block NSIn...

  • NSInvocation个人理解

    NSInvocation的使用: //NSInvocation;用来包装方法和对应的对象,它可以存储方法的名称,对...

  • 强大的NSInvocation

    前言 在消息转发中提到过NSInvocation这个类,这里说一下我所理解的NSInvocation。NSInvo...

  • NSInvocation使用

    NSInvocation NSInvocation是一个消息调用类,主要作用是存储和传递消息。它存储的信息包含了一...

  • void SendDelegateMessage(NSInvoc

    void SendDelegateMessage(NSInvocation *): delegate (webVi...

  • 使用 Invocation 来动态调用

    NSInvocation 可以方便的调用

  • NSInvocation

    在 iOS中可以直接调用某个对象的消息方式有三种:一种是[self xxxxxxx];直接对象调用另一种是 pe...

  • NSInvocation

    NSInvocation是命令模式的一种实现,它包含选择器、方法签名、相应的参数以及目标对象。所谓的方法签名,即方...

网友评论

      本文标题:NSInvocation 入门

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