Objective-C Категории - PullRequest
       24

Objective-C Категории

4 голосов
/ 05 января 2010

Если я добавлю метод категории в класс, такой как NSXMLNode:

@interface NSXMLNode (mycat)
- (void)myFunc;
@end

Будет ли этот метод категории также доступен в подклассах NSXMLNode, таких как NSXMLElement и NSXMLDocument? Или я должен определить и реализовать метод как категорию в каждом классе, что приведет к дублированию кода?

Ответы [ 3 ]

4 голосов
/ 05 января 2010

Доступно в подклассах!

2 голосов
/ 05 января 2010

Это будет доступно в подклассах, как сказал Юджи.

Однако вы должны добавить префикс к своему методу так, чтобы не было риска, что он конфликтует с каким-либо методом, публичным или частным.

т.е:.

-(void) mycat_myMethod;
1 голос
/ 06 января 2010

Да, он будет доступен, хотя я проверяю его по коду и вот он:

#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
...