gpt4 book ai didi

objective-c - 带有 bool 参数的 Objective-C 方法中出现奇怪的 "selector mangling"

转载 作者:搜寻专家 更新时间:2023-10-30 20:06:01 24 4
gpt4 key购买 nike

我需要在运行时通过反射调用动态恢复方法名称。但对某些人来说会得到奇怪的结果。

我的 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”。据我测试,这似乎只针对“bool”选择器部分完成——如果我将它更改为 int:(int),如:

- (void)testMethod1_int:(int)a1 int:(int)a2 int:(int)a3 int:(int)a4 {
...
}

我得到了预期的结果:

"testMethod1_int:int:int:int:"

问:有谁知道这个“选择器重写”的规则或指向我可以找到它们的位置的指针,还是我遗漏了什么?这只是为“bool”做的吗?我还需要知道此行为是否取决于 gcc 版本、osx 版本或运行时库版本。

我正在使用(gcc --version): i686-apple-darwin10-gcc-4.2.1 (GCC) 4.2.1(Apple Inc. build 5666)(第 3 点)在 (uname -a) 10.8.0 Darwin 内核版本 10.8.0:

最佳答案

问题出在 C99 标准头文件中丑陋的预处理器魔术 <stdbool.h> :

#define bool _Bool

C99 定义了一个名为 _Bool 的类型其行为类似于 C++ 的 bool类型。定义是为了能够在 C 中使用它,但带有 C++ 标识符。

解决方法:

#undef bool

关于objective-c - 带有 bool 参数的 Objective-C 方法中出现奇怪的 "selector mangling",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14674163/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com