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
?
Réponses
Trop de publicités?Techniquement, non. La documentation pour -[NSObject init]
indique que
La méthode
init
définie dans la classeNSObject
ne réalise aucune initialisation; elle renvoie simplementself
.
É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]
.
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 simplementself
.
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.