iOS NSMethodSignature

2021-05-08  本文已影响0人  张科_Zack

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 为参数类型

上一篇下一篇

猜你喜欢

热点阅读