iOS调用方法的三种方式

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调用方法的三种方式)