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

Mus*_*afa 5 iphone objective-c ipad ios

如果XCode项目有两个类别:

@implementation NSData (test1)
- (void) testData {
     NSLog(@"test data 1");
} 
@end
Run Code Online (Sandbox Code Playgroud)

@implementation NSData (test2)
- (void) testData {
     NSLog(@"test data 2");
} 
@end
Run Code Online (Sandbox Code Playgroud)

这个的预期输出是多少:

NSData* testData = [[NSData alloc] init];
[testData testData];
Run Code Online (Sandbox Code Playgroud)

我得到的输出总是如此

#import "NSData+test1.h"
Run Code Online (Sandbox Code Playgroud)

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

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

Per*_*ion 16

行为未定义,应该避免.以下是相关文档:

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

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

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