【发布时间】:2012-10-28 16:26:42
【问题描述】:
可能重复:
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 ios polymorphism objective-c-category