ios - "Redefenition of ' 类别 ' as a different kind of symbol"并与 Objc 运行时类名冲突

标签 ios objective-c categories

我有一个 Objective-C 类:

@interface Category : NSObject
{
// ...
}

一切都很好,我已经在 3 个不同的项目中使用了这个类(class),没有任何问题。

一旦我决定为一个项目创建测试目标。然后奇怪的事情发生了:编译器拒绝编译并出现这个错误:

Redefenition of 'Category' as a different kind of symbol

它还指向runtime.h

typedef struct objc_category *Category;

嗯,这是合理的。

但是,我不明白为什么它之前允许我使用这个类,原始目标和测试目标之间有什么区别。我检查过 Deploy target , iOS SDK ,所有宏,标题路径,#import <objc/runtime.h>和两个目标中的类 - 这些几乎相同。

我不想重构这个类的名称,因为它在多个项目中使用它,那么这种行为的原因是什么?

最佳答案

无论如何,您都应该重构此类的名称,以避免将来发生此类冲突。 越早做越不痛苦。

您导入的文件很可能会导入 <objc/runtime.h>在某一点。 关于测试目标和常规目标之间的区别,Xcode 测试通过将符号注入(inject)到包中来工作。代码剥离和符号可见性可能存在一些差异,可以解释此类错误。

难怪Apple recommends to prefix classes with 2 or 3 letters

关于ios - "Redefenition of ' 类别 ' as a different kind of symbol"并与 Objc 运行时类名冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20353408/

相关文章:

objective-c - 如何设置浮点值1.2而不是来自xcode中解析器的1.232223232

ios - 为什么我的自定义配件按钮在点击时没有改变图像 (ios)?

objective-c - 应用程序在未启用垃圾收集的情况下崩溃

ios - 以编程方式填充的 UITableView 无法填满屏幕

ios - 通过 textField.inputView 的 DatePicker 仅在第二次显示(第一次调用常规键盘)

objective-c - 如果 block 为零而没有数千个 ifs,则防止崩溃

ios - 当单元格离开屏幕时,Tableview 单元格内容会更改

ios - 带有 LiveFrost LFGlassView 的 UIView 动画

python - 检查值是否在浮点范围的分类系列中

php - 如何跟踪我使用 PHP 的子类别?