我需要在运行时通过反射调用动态恢复方法名称。但对某些人来说会得到奇怪的结果。
我的 TestClass 包含一个方法,如:
- (void)testMethod6_NSRect:(NSRect)a1 int:(int)a2 int:(int)a3 bool:(Boolean)a4 {
...
}
当使用 class_copyMethodList() 枚举上述类方法并通过 method_getName() 获取方法选择器时,我得到:
"testMethod6_NSRect:int:int:_Bool:"
因此,选择器以某种方式(通过 gcc?)被重写以从“bool”生成“_Bool”。据我测试,这似乎只适用于“布尔”选择器部分 - 如果我将其更改为 int:(int),如下所示:
- (void)testMethod1_int:(int)a1 int:(int)a2 int:(int)a3 int:(int)a4 {
...
}
我得到了预期:
"testMethod1_int:int:int:int:"
问:有没有人知道规则或指向我可以在哪里找到这些“选择器重写”的指针,或者我错过了什么?这仅适用于“布尔”吗?我还需要知道这种行为是否取决于 gcc-version、osx-version 或运行时库版本。
我正在使用 (gcc --version): i686-apple-darwin10-gcc-4.2.1 (GCC) 4.2.1 (Apple Inc. build 5666) (dot 3) on a (uname -a) 10.8.0 Darwin Kernel版本 10.8.0: