Objective-C 在多个模块中定义相同的类别

Objective-C defining the same category in multiple modules

我在 2 个模块中定义了 2 个类别:

Module 1: 

Array2D+RawString.m: 

@implementation Array2D(RawString) 

+ (Array2D *)arrayWithRawString {
  // some implementation specific to module 1
}

@end

Module 2: 

Array2D+RawString.m: 

@implementation Array2D(RawString) 

+ (Array2D *)arrayWithRawString {
  // some implementation specific to module 2
}

@end


这两个类别仅在其自己的模块中可见。我期望的是,模块 1 中的代码将是模块 1 中的文件,反之亦然。

但是,我注意到模块 2 的实现实际上被模块 1 覆盖了。为什么会这样?我该如何处理这个问题?

之所以如此,是因为语言就是这样定义它的。如果你在两个地方定义同名的类别,compiler/linker 会随机选择其中一个。

您可以使用不同名称的类别。只是不要将它们都称为 RawString。