目标C中具有相同函数名称的类别

如果一个XCode项目有两个类别:

@implementation NSData (test1) - (void) testData { NSLog(@"test data 1"); } @end 

 @implementation NSData (test2) - (void) testData { NSLog(@"test data 2"); } @end 

这是什么预期的输出:

 NSData* testData = [[NSData alloc] init]; [testData testData]; 

我得到的输出总是

 #import "NSData+test1.h" 

对此有何解释? 有没有办法强制第一类?

这里的问题是,如果你导入两个具有相同名称的类库的静态库,你如何解决这个问题。 我假设唯一的方法是要求SDK创build者使用方法名称的前缀?

行为是不确定的,应该避免。 这里是相关的文件 :

避免类别方法名称冲突

由于在类别中声明的方法被添加到现有的类中,所以您需要非常小心方法名称。

如果在类别中声明的方法的名称与原始类中的方法相同,或者在同一个类(甚至是超类)上的另一个类中的方法相同,则行为是不确定的运行时 。 如果您使用自己的类使用类别,但这不太可能成为问题,但在使用类别向标准Cocoa或Cocoa Touch类添加方法时可能会导致问题。