2010-06-07 6 views
0

J'ai un de deux classes qui ont près code identique. Seule une chaîne ou deux est différente entre eux. Ce que je voudrais faire est de les faire "x" à partir d'une autre classe qui définit ces fonctions, puis utilise des constantes ou quelque chose d'autre pour définir ces chaînes qui sont différentes. Je ne suis pas sûr si "x" est l'héritage ou l'extension ou quoi. C'est ce dont j'ai besoin d'aide.Protocole Objective-C vs héritage vs extension?

Par exemple:

objectA.m:

-(void)helloWorld { 
    NSLog("Hello %@",child.name); 
} 

objectBob.m:

#define name @"Bob" 

objectJoe.m

#define name @"Joe" 

(Je ne sais pas si il est légal de définir des cordes, mais cela point e travers)

Il serait idéal si objectBob.m et objectJoe.m ne devaient pas même définir les méthodes, juste leur relation avec objectA.m. Est-il possible de faire quelque chose comme ça? C'est un peu comme un protocole, sauf en sens inverse, je veux que le "protocole" définisse réellement les fonctions.


Si je reste échoue vais juste faire objectA.m:

-(void)helloWorld:(NSString *name) { 
    NSLog("Hello %@",name); 
} 

et ont les autres fichiers appellent cette fonction (et juste #import objectA.m).

Répondre

2

Il suffit de créer une méthode -name dans vos sous-classes (vous voulez une classe de base, puis une sous-classe pour chaque type).

Effectuez ensuite:

- (void)helloWorld { 
    NSLog(@"hello %@", [self name]); 
} 

Edit: non objc fixe comme dénomination de la méthode. Modifier à nouveau: méthode fixe.

+0

+1 sauf que ça s'appellerait "nom" par les normes de nommage du cacao. –

+0

Les méthodes getter Objective-C n'utilisent pas le mot 'get'. Ce serait juste '[nom de soi]'. Les méthodes commençant par 'get' indiquent qu'un tampon fourni est en train d'être rempli ou qu'une ressource distante est récupérée. – Chuck

+0

Cela ressemble à ça va bien fonctionner. Est-ce que/devrais-je coupler cela avec un protocole qui définit les fonctions nécessaires à la classe de base (comme le nom)? En fait, "name" doit-il être une méthode ou existe-t-il un moyen d'en faire une constante pour la sous-classe? – RyanJM

0

Sons comme héritage à moi. Définir la méthode helloWorld comme NSLog(@"Hello %@", name) et ont les sous-classes donnent des valeurs différentes à leurs name variables d'instance. (Notez que je parle de variables d'instance, pas de macros préprocesseur, qui sont inutiles à cette fin.)

+0

Existe-t-il un moyen d'échapper aux variables d'instance et de les rendre disponibles pour les méthodes de classe?Ou est le seul moyen de faire cela comme un appel de méthode comme le fait chpwn? – RyanJM

+0

Les méthodes et les variables d'instance sont le seul moyen de personnaliser le comportement par classe. Pourquoi êtes-vous opposé à l'utilisation d'un appel de méthode? – Chuck

Questions connexes