2008-12-15 9 views
19

Was ist die Standardmethode zum Einbinden von Hilfs-/Hilfsfunktionen in Obj-C-Klassen?Hilfefunktionen in Cocoa

I.e. Allgemeine Funktionen, die in der gesamten Anwendung verwendet und von mehr als einer Klasse aufgerufen werden.

Kann eine Obj-C-Methode außerhalb einer Klasse existieren, oder muss es eine C-Funktion sein, damit diese Art von Verhalten auftritt?

Antwort

6

Es gibt eine Reihe von Optionen für den in Objective-C. Erstens, da Obj-C eine strenge Obermenge von C ist, können Sie all Ihre Bibliotheksfunktionen in einem separaten Modul (Quelldatei) definieren und sie glücklich von jedem Obj-C-Objekt/Code, den Sie bereits haben, aufrufen. Wenn Sie eine obj-c-Quelldatei (.m-Datei) erstellen, können Sie dann zurück in/use-Objekte aufrufen.

Wenn Ihre generischen Funktionen andere, etablierte Objekte logisch bearbeiten (z. B. mit einem NSString arbeiten), können Sie mithilfe von Kategorien Ihre Funktionen auf bereits vorhandenen Klassen grafisch darstellen (wo dies sinnvoll ist).

Schließlich, wie Tony darauf hinweist, können Sie Klassen mit statischen Methoden erstellen (obwohl ich diese Option am wenigsten persönlich mag). Ich tendiere dazu, einen Mix aus eins und zwei zu verwenden, Kategorien hinzuzufügen und Standardfunktionen für andere zu verwenden. Ich mache generell nur eine neue Klasse, bei der es Sinn macht, eine Klasse zu entwerfen.

+1

Wenn ich eine .m-Datei erstelle, muss ich meine Methoden nicht innerhalb einer Klassenimplementierung erstellen? Gibt es eine Möglichkeit, Obj-C-Methoden außerhalb einer Klassenimplementierung zu definieren und einfach als Klassenmethoden einzubinden? – firstresponder

+0

Ich habe eine Kategorie für NSObject erstellt. Dies funktioniert gut für mich atm, aber es scheint mir nicht völlig richtig, dass meine Hilfsfunktionen zu jeder einzelnen Klasse in meiner Anwendung ausgesetzt sein sollte. Die Kategorie befindet sich in NSObject, da auf sie in meinem Anwendungsdelegaten und anderen Klassen zugegriffen werden muss. – firstresponder

+2

Für Dinge, die keine echte Klasse oder Kategorie haben, können Sie Standard-C-Funktionen verwenden. Sie können weiterhin Objekte und Referenzen im Inneren verwenden. –

22

Ich würde ähnliche Funktionen wie statische Methoden in einer Hilfsklasse gruppieren. Diese können dann mit dem Klassennamen anstatt dem Instanznamen aufgerufen werden. Statische Methoden werden mit einem + anstelle des üblichen - definiert.

wie so:

@interface HelperClass: superclassname { 
    // instance variables - none if all methods are static. 
} 

+ (void) helperMethod: (int) parameter_varName; 

@end 

Dies würde wie so genannt werden.

[HelperClass helperMethod: 10 ]; 

Da dies statisch ist, initiieren Sie die Klasse nicht. Dies hat den Vorteil, dass Sie wie Helperfunktionen eindeutig gruppieren. Sie können Standalone-C-Funktionen verwenden, aber wenn Ihre Anwendung größer wird, kann es zu einem richtigen Chaos werden! Hoffe das hilft.

Tony

+2

Klassennamen sollten in der Regel mit einem Großbuchstaben beginnen (siehe http://google-styleguide.googlecode.com/svn/trunk/objcguide.xml für eine gute Formatvorlage) – Michel

+1

Außerdem sollten Methodennamen mit einem Kleinbuchstaben beginnen zB helperMethod. –

+0

Stil ist nur das .... Sie können Ihre eigene einzigartige wählen, wenn Sie es wünschen ... Sonst würde es ein Gesetz genannt werden .... Im Geiste, nicht "den Stil" zu brechen, habe ich es geändert. ;-) – AnthonyLambert

20

Ich sehe nicht, warum Menschen vermeiden, Funktionen zu erstellen. Objective-C ist eine Obermenge von C, was bedeutet, dass C ein Teil davon ist. Außerdem ist es vollständig integriert - es gibt keine Wand zwischen ihnen.

Funktionen erstellen! Das ist gut! Stiftung macht es. Application Kit macht es. Core Animation macht es. Core Media macht es.

Ich sehe keinen Grund nicht zu.

+0

Genau! Ich sehe auch keinen Grund. –

+0

Ich nehme an, Sie haben noch nie an einer großen C-Entwicklung gearbeitet? Ich denke, die statische Methode in einer Klasse ist viel aufgeräumter. Stellen Sie sich eine App mit 100 Funktionen in 100er Dateien vor. Wenn Sie eine Klasse verwenden, werden sie gruppiert und denen, die nach dem Verständnis des Codes kommen, geholfen. – AnthonyLambert

+3

@AnthonyLambert: Ich bin nicht gegen Klassenmethoden, wenn sie angemessen sind. Es ist sicherlich möglich, zu viele Funktionen zu haben, aber es ist auch möglich, zu viele Klassenmethoden zu haben. Wenn sie zusammen gehören, sollten sie in derselben Klasse sein. Wenn Sie eine Klasse nach der anderen für jeweils eine oder zwei Methoden erstellen oder nicht verwandte Methoden in eine vage zusammenhängende (oder schlechter, vage benannte) Klasse einteilen, machen Sie sie einfach zu Funktionen. (Warnzeichen: Eine Klasse mit dem Namen "MyFileUtilities" ohne Instanzmethoden. Machen Sie sie einfach zu Funktionen.) –