2009-04-21 6 views
15

En Objective C, si vous sous-classifiez quelque chose et que vous planifiez de surcharger une méthode sur la superclasse, devez-vous déclarer à nouveau la méthode superclass dans votre sous-classe @interface? Par exemple, si vous sous-classez UIViewController (par exemple MyViewController), et que vous envisagez de remplacer "viewDidLoad" si vous incluez cette méthode dans votre déclaration MyViewController @interface, ou si vous l'implémentez simplement dans MyViewController.m?Sous-classe Objective C qui remplace une méthode dans la superclasse

Dans les exemples que j'ai rencontrés, je l'ai vu faire dans les deux sens (re-déclarer la méthode dans votre interface de sous-classe, ou ne pas re-déclarer la méthode). Il n'y a peut-être pas de différence fonctionnelle, mais quelle est la meilleure pratique?

Répondre

26

Je déclare souvent des méthodes que je prévois de remplacer dans l'en-tête public ou au moins dans une catégorie privée. L'avantage est que vous obtiendrez un avertissement de définition de classe incomplète si vous oubliez de surcharger la méthode ... ce qui est pratique de temps en temps.

Comme pour quand de le placer dans l'en-tête public, c'est assez subjectif et probablement à vous/les styles de codage de votre équipe. Je ne redécris généralement une méthode dans l'en-tête public que si j'ai l'intention de changer radicalement ce que la méthode va faire ou si je prévois de ne pas invoquer la version de la méthode de la super classe.

+12

+1 Cela a du sens. Quelqu'un avec un nom comme "Coco (a)" doit savoir ce qu'il fait. –

+0

Vous obtenez un avertissement de définition incomplète même si la superclasse a une implémentation? Je ne le savais pas; J'ai toujours pensé que déclarer une méthode déjà présente dans la superclasse était redondant, que vous la remplaciez ou non. –

+1

@ranReloaded Vous recevez uniquement l'avertissement si vous avez déclaré spécifiquement la méthode. Fondamentalement, lorsque vous faites cela, vous dites au compilateur que vous avez l'intention de réimplémenter la méthode et de lui demander de vous avertir si vous ne l'avez pas fait. –

5

Les personnes utilisent souvent l'en-tête comme documentation pour la classe (et les outils comme AutoDoc le prennent en charge). Évidemment, si vous suivez cette convention, le seul choix raisonnable est d'inclure des méthodes redéfinies afin que vous puissiez expliquer ce que vous avez fait avec eux. Sinon, vos documents pour la classe sont soit incomplets ou dispersés aux quatre coins de la terre.

Mais si nous ne faisons que copier-coller la déclaration, je n'aime pas personnellement redéclarer les méthodes. Ce n'est pas DRY et ça gonfle inutilement votre en-tête. Moins de code est meilleur code.

+0

Également un bon point –

Questions connexes