2010-01-05 3 views
4

Si j'ajoute une méthode de catégorie à une classe, comme NSXMLNode:Objective-C Catégories

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

cette méthode de catégorie seront également disponibles dans les sous-classes de NSXMLNode, comme NSXMLElement et NSXMLDocument? Ou dois-je définir et implémenter la méthode en tant que catégorie dans chaque classe, conduisant à la duplication de code?

+1

Merci à tous ceux qui ont répondu à cette question. Vous avez tout à fait raison! L'ajout d'une méthode de catégorie à une classe de base entraîne également l'implémentation de la méthode par toutes les sous-classes. – Paul

Répondre

4

Il est disponible dans les sous-classes!

2

Il sera disponible dans les sous-classes comme Yuji l'a dit. Cependant, vous devez préfixer votre méthode de manière à ce qu'il n'y ait aucun risque de conflit avec une méthode, publique ou privée.

Ie:

-(void) mycat_myMethod; 
1

Oui, ce sera disponible, je pensais de le vérifier par le code et la voici:

#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; 
} 

La sortie est:

Another Method