如果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,那么如何解决该问题。我假设唯一的方法是让SDK创建者使用方法名称的前缀?
答案 0 :(得分:15)
行为未定义,应避免使用。这是relevant documentation:
避免使用类别方法名称冲突
因为在类别中声明的方法被添加到现有方法中 在类中,您需要非常小心方法名称。
如果在类别中声明的方法的名称与方法相同 在原始类中,或在另一个类别中的方法相同 class(甚至是超类),行为未定义为哪个 方法实现在运行时使用。这不太可能是一个 如果您使用自己的类别的类别,但可能导致问题 使用类别将方法添加到标准Cocoa或。时的问题 Cocoa Touch课程。