9 Stimmen

Objective-c private versus public methods and declaration in header or not? objective-c private versus public methods and declaration in header or not?

Was ist der beste praxisorientierte Ansatz für private Methoden in Objective-C? Das ist eine Methode, die nur von der Klasse als Hilfsmethode verwendet wird.

Insbesondere ist mir nicht klar:

  1. Gibt es überhaupt die Notwendigkeit, die Methode in der Header-Datei als privat zu kennzeichnen? Warum sollte man sie nicht einfach aus der Header-Datei entfernen?
  2. Wenn man sie aus der Header-Datei entfernen kann, was ist dann der Sinn von privaten Methoden?
  3. Oder ist es im Objective-C so, dass es keine echten privaten Methoden gibt, in diesem Fall ist es dann besser, einfach alles in der Header-Datei anzugeben und sich nicht die Mühe zu machen, es als privat zu kennzeichnen?

Danke

7voto

Anomie Punkte 89467

Es ist nicht notwendig, die Methode in der öffentlichen Header-Datei anzugeben. Möglicherweise möchten Sie eine "private" Header-Datei für die Verwendung durch andere Klassen in Ihrem Modul erstellen, wenn die Klassen in Ihrem Modul als "friends" fungieren sollen. Sie könnten sogar eine "geschützte" Header-Datei haben, wie Apple es zum Beispiel mit UIGestureRecognizerSubclass.h macht. Es handelt sich alles nur um eine Konvention, nichts wird jedoch von der Sprache selbst unterstützt.

Eine private Methode in Objective-C ist einfach eine, die nicht öffentlich dokumentiert ist; jede Methode kann dennoch von überall aufgerufen werden, solange der Aufrufer den Namen kennt, um den entsprechenden Selector zu erstellen. Der Vorteil, eine Methode nicht öffentlich zu dokumentieren, besteht darin, dass Sie sie ändern oder entfernen können, ohne sich um die Abwärtskompatibilität sorgen zu müssen. Sie aus der Header-Datei auszulassen, ist eine Möglichkeit, sie nicht öffentlich zu dokumentieren.

6voto

DougW Punkte 26369

Was du wahrscheinlich verwenden möchtest, sind sogenannte "Klassenerweiterungen". Sie sehen ähnlich aus, dürfen aber nicht mit Kategorien verwechselt werden. Dadurch kannst du private Methoden in deiner .m-Datei deklarieren und du erhältst alle schönen IDE-Korrekturen und -Vorschläge.

Hier ist ein anständiger Artikel dazu
Und eine verwandte SO-Frage

2voto

PapaSmurf Punkte 2198

Die bewährte Methode (und ist sogar eine Compiler-Option, um zu überprüfen), besteht darin, dass ALLE Methoden eindeutig deklariert werden. Um Helfermethoden vor neugierigen Blicken zu 'verstecken', deklarieren Sie sie als solche in der Implementierungsdatei .m, zum Beispiel:

#import Client;

@interface myClass (Private)
- (void) privateMethod;
- (float) bankAccountBalanceForClient:(Client *)client;
@end

@implementation myClass
- (void) privateMethod;
{
    //foo here
}

und so weiter. Die privaten Methoden sind eine Kategorie namens Private von myClass-Methoden. Diese Kategorie kann überall deklariert werden, selbst in einer Masterdatei namens privatemethoden.h, obwohl das ein Wartungs-Albtraum wäre.

Also, indem Sie die öffentliche .h-Datei für öffentliche Methoden und die .m-Datei für private Methoden verwenden, haben Sie alle Ihre Methoden irgendwo deklariert. Ich verwende diese Compiler-Option, um sicherzustellen und zu erzwingen, dass jede verwendete Methode tatsächlich irgendwo deklariert ist (oder ich einen Syntaxfehler erhalte) und somit keine Laufzeitfehler aufgrund nicht gefundener Methoden auftreten.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X