Категории Objective-C
-
18-09-2019 - |
Вопрос
Если я добавлю метод категории в класс, например NSXMLNode:
@interface NSXMLNode (mycat)
- (void)myFunc;
@end
Будет ли этот метод категории также доступен в подклассах NSXMLNode, таких как NSXMLElement и NSXMLDocument?Или мне придется определить и реализовать метод как категорию в каждом классе, что приведет к дублированию кода?
Решение
Он доступен в подклассах!
Другие советы
Как сказал Юджи, он будет доступен в подклассах.
Однако вам следует добавлять префикс к своему методу, чтобы не было риска его конфликта с каким-либо методом, общедоступным или частным.
То есть:
-(void) mycat_myMethod;
Да, он будет доступен, хотя я проверял его по коду, и вот он:
#import <Foundation/Foundation.h>
@interface Cat1 : NSObject {
}
@end
@implementation Cat1
- (void) simpleMethod
{
NSLog(@"Simple Method");
}
@end
@interface Cat1 (Cat2)
- (void) addingMoreMethods;
@end
@implementation Cat1 (Cat2)
- (void) addingMoreMethods
{
NSLog(@"Another Method");
}
@end
@interface MYClass : Cat1
@end
@implementation MYClass
@end
int main (int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
MYClass *myclass = [[MYClass alloc] init];
[myclass addingMoreMethods];
[myclass release];
[pool drain];
return 0;
}
Результат:
Another Method
Не связан с StackOverflow