2009-04-21 4 views
15

Wenn Sie in Objective C etwas unterklassifizieren und eine Methode für die Oberklasse überschreiben, sollten Sie die Oberklassenmethode in Ihrer Unterklasse @interface erneut deklarieren?Objective C-Unterklasse, die eine Methode in der Oberklasse überschreibt

Wenn Sie beispielsweise UIViewController (z. B. MyViewController) unterklassifizieren und "viewDidLoad" überschreiben, sollten Sie diese Methode in Ihre MyViewController @interface-Deklaration einschließen oder sie einfach in MyViewController.m implementieren?

In Beispielen, die ich gesehen habe, habe ich es in beiden Richtungen gesehen (re-deklarieren Sie die Methode in Ihrer Unterklasse-Schnittstelle, oder nicht erneut deklarieren Sie die Methode). Es gibt vielleicht keinen funktionellen Unterschied, aber was ist die beste Praxis?

Antwort

26

Ich erkläre oft Methoden, die ich in der öffentlichen Kopfzeile oder zumindest in einer privaten Kategorie überschreiben möchte. Der Vorteil besteht darin, dass Sie eine unvollständige Warnung zur Klassendefinition erhalten, wenn Sie vergessen, die Methode zu überschreiben ... was von Zeit zu Zeit nützlich ist.

Wie für wenn es in den öffentlichen Header zu platzieren, das ist ziemlich subjektiv und wahrscheinlich bis zu Ihnen/Ihrem Team Codierung Stile. Normalerweise dekodierte ich eine Methode im öffentlichen Header nur dann neu, wenn ich plane, radikal zu ändern, was die Methode tun wird, oder ob ich vorhabe, die Superklassenversion der Methode nicht aufzurufen.

+12

+1 Das macht Sinn. Jemand mit einem Namen wie "Coco (a)" muss wissen, was er macht. –

+0

Sie erhalten eine unvollständige Definition Warnung, obwohl die Superklasse eine Implementierung hat? Das wusste ich nicht; dachte immer, dass das Deklarieren einer Methode, die bereits in der Oberklasse vorhanden ist, überflüssig ist, unabhängig davon, ob Sie sie überschreiben oder nicht. –

+1

@ranReloaded Sie erhalten nur dann eine Warnung, wenn Sie die Methode explizit deklarieren. Wenn Sie das tun, sagen Sie dem Compiler, dass Sie die Methode re-implementieren möchten und Sie bitten, Sie zu warnen, wenn Sie das nicht tun. –

5

Benutzer verwenden häufig den Header als Dokumentation für die Klasse (und Tools wie AutoDoc unterstützen dies). Wenn Sie dieser Konvention folgen, ist es natürlich sinnvoll, neu definierte Methoden zu verwenden, um zu erklären, was Sie damit gemacht haben. Ansonsten sind Ihre Dokumente für die Klasse entweder unvollständig oder verstreut in die vier Ecken der Erde.

Aber wenn wir nur die Deklaration kopieren, möchte ich Methoden nicht neu deklarieren. Es ist nicht DRY und es bläht den Header unnötig auf. Weniger Code ist besser Code.

+0

Auch ein guter Punkt –

Verwandte Themen