<分区>
<分区>
Possible Duplicate:
What happens if two ObjC categories override the same method?
我在 NSString 类上有两个类别,如下所示:
//第一类
#import "NSString+MyCategory1.h"
@implementation NSString (MyCategory1)
-(void)myMethod{
NSLog(@"this is my method from category 1");
}
@end
//第二类
#import "NSString+MyCategory2.h"
@implementation NSString (MyCategory2)
-(void)myMethod{
NSLog(@"this is my method from category 2");
}
@end
但下面的主要方法总是从 MyCategory1
调用 myMethod
,即使在相同的导入已被注释掉之后也是如此。
#import <Foundation/Foundation.h>
//#import "NSString+MyCategory1.h"
#import "NSString+MyCategory2.h"
int main(int argc, const char * argv[])
{
@autoreleasepool {
[[[NSString alloc]init] myMethod];
}
return 0;
}
请任何人解释这种行为以及这种行为在实践中如何有用。
最佳答案
我认为这表明您不应该在冲突的类别中使用方法。
我的(半知情的)猜测是哪个方法被调用到应用程序的编译方式,所以它不是您可以在运行时影响的东西。它在实践中并没有真正的用处,它只是……发生了什么。
至于为什么会发生这种情况,头文件没有说明调用该方法时要做什么,只是说明它存在一个实现。在你的情况下,它确实存在。它恰好不是你想要的。
关于Objective-C 类别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13289646/