35 votes

Exposer une méthode ou une propriété Objective-C privée aux sous-classes

Selon certaines discussions officielles, une classe en Objective-C ne devrait exposer que des méthodes et des propriétés publiques dans son en-tête :

@interface MyClass : NSObject

@property (nonatomic, strong) MyPublicObject *publicObject;

- (void)publicMethod;

@end

et les méthodes/propriétés privées devraient être conservées dans une extension de classe dans le fichier .m :

@interface MyClass()

@property (nonatomic, strong) MyPrivateObject *privateObject;

- (void) privateMethod;

@end

et je ne pense pas qu'il y ait un type protected pour les éléments qui sont privés mais accessibles depuis les sous-classes. Je me demande, y a-t-il un moyen d'atteindre cela, en dehors de déclarer les propriétés/méthodes privées publiquement ?

1voto

Chuck Krutsinger Points 678

Je vois de bonnes réponses pour rendre les propriétés visibles, mais je ne vois pas clairement comment exposer les méthodes traitées dans aucune de ces réponses. Voici comment j'ai exposé avec succès les méthodes privées à la sous-classe en utilisant une Catégorie :

SomeSuperClass.m:

@implementation SomeSuperClass

-(void)somePrivateMethod:(NSString*)someArgument {
    ...
}

SomeChildClass.h

@interface SomeChildClass : SomeSuperClass

SomeChildClass.m

@interface SomeSuperClass (exposePrivateMethod)
-(void)somePrivateMethod:(NSString*)someArgument;
@end

@implementation SomeChildClass

-(void)doSomething {
    [super somePrivateMethod:@"argument"];
}

@end

0voto

Scott Berrevoets Points 8932

C'est parce qu'il n'y a même pas de véritable distinction entre privé et public. Bien que le compilateur puisse vous avertir d'une interface manquant d'une certaine méthode ou variable d'instance, votre programme fonctionnera toujours.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X