В объекте c:
работает следующее:// Base Class in ClassA.h and ClassA.m
@interface ClassA : NSObject
- (NSString *) myMethod;
@end
@implementation ClassA
- (NSString*) myMethod { return @"A"; }
@end
//Category in ClassA+CategoryB.h and ClassA+CategoryB.m
@interface ClassA (CategoryB)
- (NSString *) myMethod;
@end
@implementation ClassA (CategoryB)
- (NSString*) myMethod { return @"B"; }
@end
Вопрос в том, что я просто импортирую ClassA.h и отправляю сообщение
[myClassA myMethod]; //returns B
Почему это возвращает B
? Я не импортирую ClassA + CategoryB
Даже futhrer, если бы я сделал следующее:
// Base Class in ClassA.h and ClassA.m
@interface ClassA : NSObject
- (NSString *) myMethod;
- (NSString *) mySecondMethod;
@end
@implementation ClassA
- (NSString*) myMethod { return @"A"; }
- (NSString *) mySecondMethod { return [self myMethod]; }
@end
//Category in ClassA+CategoryB.h and ClassA+CategoryB.m
@interface ClassA (CategoryB)
- (NSString *) myMethod;
@end
@implementation ClassA (CategoryB)
- (NSString*) myMethod { return @"B"; }
@end
и вызовите mySecondMethod:
ClassA *a = [[ClassA alloc] init];
NSLog(@"%@",[a myMethod]);
результат все равно будет B
, хотя никто не знает (из-за отсутствия импорта) реализации категории?!
Я бы исключил, только чтобы вернуть B
, если я импортировал категорию...
Таким образом, любые намеки были оценены.