Вопрос

Если я добавлю метод категории в класс, например 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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top