2011-05-29 3 views
2

Dans l'objectif-C, je souhaite avoir un appel de classe enfant ou invoquer la méthode d'un parent. Comme dans le parent a alloué l'enfant et l'enfant fait quelque chose qui invoquerait une méthode parente. comme ça:La classe enfant appelle une méthode de la classe parent

//in the parent class 
childObject *newChild = [[childClass alloc] init]; 
[newChild doStuff]; 

//in the child class 
-(void)doStuff { 
    if (something happened) { 
     [parent respond]; 
    } 
} 

Comment pourrais-je faire cela? (Si vous pouviez expliquer en détail, je l'apprécierais)

+0

double possible de [accès HOWTO la méthode déclarée dans la classe parente?] (http://stackoverflow.com/questions/5063484/howto-access-the-method-declared-in-the-parent-class) – moonman239

Répondre

6

Vous pouvez utiliser un délégué pour cela: a childClass définir un protocole de délégué et une propriété de délégué qui se conforme à ce protocole. Ensuite, votre exemple changerait quelque chose comme ceci:

// in the parent class 
childObject *newChild = [[childClass alloc] init]; 
newChild.delegate = self; 
[newChild doStuff]; 

// in the child class 
-(void)doStuff { 
    if (something happened) { 
     [self.delegate respond]; 
    } 
} 

Il y a un exemple de la façon de déclarer et d'utiliser un protocole délégué ici: How do I set up a simple delegate to communicate between two view controllers?

3

Il n'y a pas vraiment beaucoup à expliquer.

Pour une utilisation dans cette situation, vous avez le mot-clé super, ce qui est beaucoup comme self, sauf qu'il se réfère à ce self avait été si elle avait été membre de ses propres superclasse immédiats:

// in the child class 
- (void)doStuff { 
    if (something happened) { 
    [super respond]; 
    } 
} 
+1

Ce n'est pas correct - 'super' fait référence à la superclasse d'un objet, pas à l'objet instancié il. –

+1

@Simon Whitaker: Il demande à propos d'une * classe enfant *. Pas la terminologie correcte, bien sûr, mais c'est un saut pour suggérer qu'il veut parler à l'objet instanciant. –

+2

Pas vraiment - c'est exactement ce qu'il précise dans sa question. "Le parent a alloué l'enfant et l'enfant fait quelque chose qui invoquerait une méthode parente." D'accord que la terminologie est mal utilisée cependant. –

Questions connexes