Objective-C分类

4
如果我给一个类添加一个类别方法,例如NSXMLNode:
@interface NSXMLNode (mycat)
- (void)myFunc;
@end

这个类别方法在NSXMLNode的子类(如NSXMLElement和NSXMLDocument)中是否也可用?还是我必须在每个类中定义和实现该方法作为一个类别,从而导致代码重复?

1
感谢回答这个问题的每一个人。你们都是正确的!将类别方法添加到基类会导致所有子类也实现该方法。 - Paul
3个回答

4

它可在子类中使用!


2

正如Yuji所说,它将在子类中可用。

然而,您应该添加前缀来确保其不会与任何方法(公有或私有)发生冲突。

即:

-(void) mycat_myMethod;

1

是的,它将可用,我考虑通过代码进行检查,这里是:

#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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接