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 为参数类型
网友评论