目标C中具有相同功能名称的类别

时间:2013-03-15 02:23:49

标签: ios iphone objective-c ipad

如果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创建者使用方法名称的前缀?

1 个答案:

答案 0 :(得分:15)

行为未定义,应避免使用。这是relevant documentation

  

避免使用类别方法名称冲突

     

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

     

如果在类别中声明的方法的名称与方法相同   在原始类中,或在另一个类别中的方法相同   class(甚至是超类),行为未定义为哪个   方法实现在运行时使用。这不太可能是一个   如果您使用自己的类别的类别,但可能导致问题   使用类别将方法添加到标准Cocoa或。时的问题   Cocoa Touch课程。