363 Stimmen

Der beste Weg, private Methoden für eine Klasse in Objective-C zu definieren

Ich habe gerade mit der Programmierung von Objective-C begonnen und frage mich, da ich einen Hintergrund in Java habe, wie Leute, die Objective-C-Programme schreiben, mit privaten Methoden umgehen.

Ich verstehe, dass es verschiedene Konventionen und Gewohnheiten geben kann, und betrachte diese Frage als einen Aggregator der besten Techniken, die Menschen im Umgang mit privaten Methoden in Objective-C verwenden.

Bitte geben Sie bei der Veröffentlichung eine Begründung für Ihren Ansatz an. Warum ist er gut? Welche Nachteile hat er (die Ihnen bekannt sind) und wie gehen Sie damit um?


Was meine bisherigen Erkenntnisse betrifft.

Es ist möglich, Folgendes zu verwenden Kategorien [z. B. MyClass (Private)] in der Datei MyClass.m definiert, um private Methoden zu gruppieren.

Dieser Ansatz hat 2 Probleme:

  1. Xcode (und Compiler?) prüft nicht, ob Sie alle Methoden in der Kategorie private im entsprechenden @implementation-Block definieren
  2. Sie müssen @interface, das Ihre private Kategorie deklariert, an den Anfang der Datei MyClass.m setzen, sonst beschwert sich Xcode mit einer Meldung wie "self may not respond to message "privateFoo".

Das erste Problem kann durch folgende Maßnahmen gelöst werden leere Kategorie [z.B. MyClass ()].
Der zweite Punkt stört mich sehr. Ich würde gerne private Methoden am Ende der Datei implementiert (und definiert) sehen; ich weiß nicht, ob das möglich ist.

1voto

Sneg Punkte 982

Die Abwesenheit privater Methoden ist von Vorteil. Sie können die Logik, die Sie verbergen möchten, in eine separate Klasse verschieben und diese als Delegaten verwenden. In diesem Fall können Sie das Delegate-Objekt als privat markieren und es wird von außen nicht sichtbar sein. Das Verschieben der Logik in eine separate Klasse (vielleicht mehrere) verbessert das Design Ihres Projekts. Denn Ihre Klassen werden einfacher und Ihre Methoden werden in Klassen mit richtigen Namen gruppiert.

0voto

Milan Punkte 1653

Wie bereits gesagt wurde, ist die Definition privater Methoden in der @implementation Block ist für die meisten Zwecke in Ordnung.

Zum Thema Code-Organisation - Ich halte sie gerne zusammen unter pragma mark private für eine einfachere Navigation in Xcode

@implementation MyClass 
// .. public methods

# pragma mark private 
// ...

@end

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