美文网首页
iOS调用方法的三种方式

iOS调用方法的三种方式

作者: 蔚尼 | 来源:发表于2018-05-30 15:19 被阅读1349次

    iOS中用三种方式调用方法:
    如下的printStr1方法:

    - (void)printStr:(NSString*)str{
        NSLog(@"printStr  %@",str);
    }
    
    1. 直接调用
    [self printStr:@"hello world 1"];
    
    1. 使用performSelector:withObject:
    [self performSelector:@selector(printStr:) withObject:@"hello world 2"];
    
    1. 使用NSMethodSignature&NSInvocation
        //获取方法签名
        NSMethodSignature *sigOfPrintStr = [self methodSignatureForSelector:@selector(printStr:)];
        //获取方法签名对应的invocation
        NSInvocation *invocationOfPrintStr = [NSInvocation invocationWithMethodSignature:sigOfPrintStr];
        /**
         设置消息接受者,与[invocationOfPrintStr setArgument:(__bridge void * _Nonnull)(self) atIndex:0]等价
         */
        [invocationOfPrintStr setTarget:self];
        /**设置要执行的selector。与[invocationOfPrintStr setArgument:@selector(printStr1:) atIndex:1] 等价*/
        [invocationOfPrintStr setSelector:@selector(printStr:)];
        //设置参数
        NSString *str = @"hello world 3";
        [invocationOfPrintStr setArgument:&str atIndex:2];
        //开始执行
        [invocationOfPrintStr invoke];
    

    NSMethodSignature

    NSMethodSignature用于描述method的类型信息:返回值类型,及每个参数的类型。

    NSInvocation

    NSInvocation对象主要用于存储和转发对象之间和应用程序之间的消息。
    NSInvocation对象包含Objective-C消息的所有元素:目标(target),选择器(selector),参数和返回值。
    可以直接设置这些元素,并在NSInvocation对象被dispatched时自动设置返回值。

    转载自:NSproxy

    相关文章

      网友评论

          本文标题:iOS调用方法的三种方式

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