Initialiseur désigné

enzyme2006enzyme2006 Membre
mars 2014 modifié dans API AppKit #1

Bonjour,


 


L'initialiseur désigné de chaque classe doit invoquer l'initialiseur désigné de sa superclasse,


 


mais dans le code ci-dessous :



- (id)initTextCell:(NSString *)aString
// Initialiseur désigné redéfini.
{
self = [super initTextCell:aString];
if(nil != self)
{
[self setBarValue: 1.0f];
[self setFont:[NSFont labelFontOfSize:[NSFont labelFontSize]]];
}
return self;
}

- (id)initTextCell:(NSString *)aString
// Initialiseur désigné redéfini.
{
self = [super init];
if(nil != self)
{
[self initTextCell:(NSString *)aString: @””];
}
return self;
}


Je ne saisi pas la différence entre :



self = [super initTextCell:aString];

et



self = [super init];

Les deux classes étant dérivées de NSObject


 


Hors je ne comprends pas le lien avec la super classe dans le 1er cas et je suppose que "init" du deuxième cas faire référence à  - (id) init de NSObject ?


 


Merci  à  tous.


 


Enzyme


 


PS : extrait de code du livre ; Les design pattern de Cocoa.


Réponses

  • AliGatorAliGator Membre, Modérateur
    Déjà  sans lire plus loin, ton code n'a aucun sens :

    1) Déjà , initWithText est défini 2 fois... ?!
    2) Dans la 2ème définition, tu as une erreur de syntaxe, ton appel à  initTextCell: ne veut rien dire / ne ressemble à  rien
    3) Tu appelles 2 méthodes d'init ([super init] et [self initTextCell:] dans cette 2ème implémentation. Il ne faut jamais initialiser 2 fois un même objet.

    Bref, ce code et en particulier ta 2ème implémentation de initTextCell: ne veut vraiment rien dire.
  • CéroceCéroce Membre, Modérateur

    Les deux classes étant dérivées de NSObject

    Si une classe hérite directement de NSObject, alors on ne peut pas appeler [super initTextCell:], puisque NSObject ne comporte pas de méthode -initTextCell:.
  • Merci AliGator et Céroce, je viens de comprendre l'implication de NSObject dans le cas de l'initialisation.


     


    Encore Merci.


Connectez-vous ou Inscrivez-vous pour répondre.