我有一个 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)到包中来工作。代码剥离和符号可见性可能存在一些差异,可以解释此类错误。
关于ios - "Redefenition of ' 类别 ' as a different kind of symbol"并与 Objc 运行时类名冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20353408/