13 votes

Est-ce que j'ai besoin d'appeler [super init] ou [super initWithCoder], etc pour NSObject

Généralement, lorsque je sous-classe à partir d'une classe UI, j'appellerai l'initialiseur de la superclasse d'intérêt. Cependant, je ne suis pas sûr des détails de l'implémentation de NSObject, et il semble qu'il n'y a pas grand-chose en termes de variables membres, donc je me demande : est-ce que j'ai besoin d'appeler [super init] si ma sous-classe étend NSObject ?

12voto

John Calsbeek Points 19381

Techniquement, non. La documentation pour -[NSObject init] indique que

La méthode init définie dans la classe NSObject ne réalise aucune initialisation; elle renvoie simplement self.

Étant donné que cela est documenté et qu'il y a probablement déjà une tonne de code qui s'appuie dessus, il est fortement improbable que ce fait change dans les futures versions de Mac OS X.

Édition: BoltClock's a Unicorn soulève un point que j'aimerais rendre plus hyperbolique: le temps total gagné en ne pas appelant -[NSObject init] pour tous ceux qui exécutent jamais votre programme est probablement inférieur au temps de débogage que vous encourriez si vous changiez un jour la superclasse de votre classe pour quelque chose d'autre que NSObject et oubliez d'ajouter un appel à [super init].

6voto

BoltClock Points 249668

Depuis la documentation, il ne semble pas effectuer d'initialisation du tout :

La méthode init définie dans la classe NSObject ne fait aucune initialisation; elle retourne simplement self.

Je suppose qu'il serait inoffensif de ne pas appeler [super init], mais il n'y a aucune raison de ne pas suivre les conventions et, vous savez, de l'appeler dans votre sous-classe de toute façon. Par exemple, votre sous-classe pourrait finir par hériter d'une autre classe à l'avenir, qui pourrait contenir une logique d'initialisation dans sa propre méthode -init que votre sous-classe finira par nécessiter.

1voto

justin Points 72871

Il suffit d'appeler l'un des initialiseurs désignés de super dans votre implémentation car vous devez simplement faire ce qui est clair et correct.

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