方法签名与调用 NSMethodSignature - NSInvocation

使用 NSTimer 时,发现有这么2个东西,也不是很理解,简单使用如下,跟直接调用方法效果类似。更多深入求教育,谢谢。

  • 1 有个类,存在方法,别的类调用。自己调用自己的也一样。
@interface TestClass : NSObject
- (NSString *)appendStringWithstring1:(NSString *)str1 string2:(NSString *)str2;// 具体实现 就是 拼接字符串。
@end
  • 2 其他类调用

    // 要调用 方法的 类
    TestClass *testClass = [[TestClass alloc] init];
    // 方法的 2 个参数
    NSString *str1 = @"111";
    NSString *str2 = @"222";
    
    // 需要实现的方法
    SEL testSeletor = @selector(appendStringWithstring1:string2:);
    
    // 签名?
    NSMethodSignature *sig = [[TestClass class] instanceMethodSignatureForSelector:testSeletor];
   
    // 调用 设置:目标信号,执行对象 与 方法
    NSInvocation *testInvocation = [NSInvocation invocationWithMethodSignature:sig];
    [testInvocation setTarget:testClass];
    [testInvocation setSelector:testSeletor];
    
    // 传入参数,index 01 就是我们常写的 self 和 @select,默认了。所以我传参数 从2 开始
    [testInvocation setArgument:&str1 atIndex:2];
    [testInvocation setArgument:&str2 atIndex:3];
    
    // 回调 结果
    NSString *testResult = nil;
    [testInvocation retainArguments];
    [testInvocation invoke];
    [testInvocation getReturnValue: &testResult];
    
    // 打印 处理结果:即拼接字符串
    NSLog(@"%@",testResult);

实际上我们都直接调用

水平不够,只能写这么多了。

    NSString *result = [testClass appendStringWithstring1:str1 string2:str2];

你可能感兴趣的:(方法签名与调用 NSMethodSignature - NSInvocation)