美文网首页
iOS NSMethodSignature

iOS NSMethodSignature

作者: 张科_Zack | 来源:发表于2021-05-08 10:24 被阅读0次

    Objective-C 中使用 NSMethodSignature 来记录一个方法的参数类型和返回值类型。

    视图控制器中的一个方法

    // Class  ViewController
    - (int)testFunction:(BOOL)aa {
        return  1;
    }
    
    // 执行以下方法
        NSMethodSignature *sign = [ViewController instanceMethodSignatureForSelector:@selector(testFunction:)];
        NSInteger aaa  =[sign numberOfArguments];
        
        for (int i = 0; i < aaa; i ++) {
            printf("%d_%s\n", i, [sign getArgumentTypeAtIndex:i]);
    
        }
        printf("returnValue_%s", [sign methodReturnType]);
    
    // 输出结果
    // 参数: @ 为对象类型 ,    :为 selector(方法选择器 _cmd), B 为 BOOL 类型。
    // 返回值 i 为 int
    0_@
    1_:
    2_B
    returnValue_i(lldb) 
    

    结论
    NSMethodSignature :
    (1)参数类型
    第 0 个参数是 target(也可以是 receiver 方法调用者)的类型
    第 1 个参数是 selector 类型也只能是 selector 类型
    第 2 个参数是 方法的 参数类型
    ...方法的参数可以有多个
    (2) 返回值类型
    只有一个是返回值的类型

    NSMethodSignature 初始化

    // 初始化 NSMethodSignature 针对 testFunction 方法
    // "i@:B" 
    // 1.第一个  i  为返回值类型
    // 2.第二个 @ 为 target 类型
    // 3.第三个 : 为 selector 类型 也只能为 :
    // 4.第四个 B 为参数类型
        NSMethodSignature *sign = [NSMethodSignature signatureWithObjCTypes:"i@:B"];
    
    - (int)testFunction:(BOOL)aa {
        return  1;
    }
    
    

    // 初始化 NSMethodSignature 针对 testFunction 方法
    // "i@:B"
    // 1.第一个 i 为返回值类型
    // 2.第二个 @ 为 target 类型
    // 3.第三个 : 为 selector 类型 也只能为 :
    // 4.第四个 B 为参数类型

    相关文章

      网友评论

          本文标题:iOS NSMethodSignature

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