2009-06-05 4 views

Antwort

3

Ich denke, solange es irgendwo definiert ist und in einer der Dateien enthalten ist, die Sie sind kompilierend, ist es definiert. Es gibt keine Konventionen wie "ClassName.java" in Objective-C, wie es sie in Java gibt.

Dies ist ziemlich hilfreich, wenn Sie Dinge wie categories für Dinge wie private Methoden/Eigenschaften tun möchten.

-1

In Objective-C ist das gleiche. Weil ein Protokoll eine Liste von Methoden ist, die von Klassen gemeinsam genutzt werden. Das Protokoll ist nur die Liste der Methoden ohne entsprechende Implementierungen. Sie sollen von jemand anderem implementiert werden.

3

Protokolle sind in der Regel in ihrer eigenen .h-Datei definiert (nach meiner Erfahrung). Sie können jedoch in einer Datei shared.h definiert werden. Es wäre schwierig, Benutzern des Protokolls zu erlauben, das Protokoll in einer gemeinsamen Dateianordnung zu übernehmen, und außerdem würde es Ihre API überladen. Die Dokumentation und Verwendung wäre wahrscheinlich einfacher, wenn das Protokoll in einer eigenen .h-Datei gespeichert ist.

Auch die Verwendung Ihres Protokolls für Dinge wie polymorphe Implementierungen hätte weniger Overhead, wenn Sie nur die Protokolldatei .h anstelle einer .h-Datei mit anderen Klassendeklarationen benötigen. Ich bin auf die genauen Kosten/Einsparungen von dieser Idee nicht sicher, aber ich habe dort einige wäre lesen (kleinere binary?)

Grüße, Frank

19

Ich denke, die Platzierung des Protokolls abhängt wie du es benutzt. Häufig wird ein Protokoll verwendet, um die Funktionalität eines Delegaten oder einer Datenquelle für eine andere Klasse zu definieren. Wenn das der Fall ist, denke ich, dass Sie die Protokolldefinition sicher an die Spitze der anderen Klasse setzen können, da sie zwangsläufig zusammen verwendet werden.

Wenn Sie ein Protokoll anstelle einer gemeinsamen Basisklasse definieren, sollten Sie es wahrscheinlich in eine separate Datei einfügen. Zum Beispiel habe ich mehrere verschiedene Klassen, die das "Operation" -Protokoll implementieren. Einige meiner anderen Funktionen erwarten, ein Objekt zu erhalten, das das Protokoll implementiert, und kümmern sich nicht allzu sehr um die tatsächlichen Klassen. In diesem Fall ist es sinnvoll, die Protokolldefinition in eine eigene Header-Datei zu übernehmen, damit Sie sie selbst hinzufügen können.

Benny hat recht, obwohl es technisch definiert ist, egal wo Sie es setzen (solange es irgendwo vor seiner Verwendung enthalten ist).

+0

Ich arbeitete an Code-Review, wo ich ein Protokoll in der Anzahl der Klassen neu geschrieben, ich erstelle eine separate Datei für die Definition von protocol.verpasste jedoch den Import dieser Datei. Ihre Antwort "(solange sie vor der Verwendung irgendwo enthalten ist)." danke + – Alok

0

In Objective-C ist es wirklich eine Frage des Stils. Ich nehme an, der wirklich "richtige" Weg besteht darin, eine separate .h-Datei für das Protokoll zu erstellen, und wenn ich ein Protokoll erstellen würde, das zu nichts anderem gehört (wie zum Beispiel NSCoding), würde ich genau das tun. Auf der anderen Seite ist die meiste Zeit, wenn ich ein Protokoll (oder ein informelles Protokoll, indem ich eine Kategorie für NSObject verwende), an eine andere Klasse gebunden, wie das informelle Protokoll der NSTableView Datenquelle. In diesen Situationen lege ich die Deklaration der Einfachheit halber in die Header-Datei dieser Klasse.

0

Siehe auch Apples Communicating with Objects, die Delegaten, Protokolle und Selektoren behandelt. Obwohl es unter Mac OS X aufgeführt ist, scheint die Mehrheit (wenn nicht alle) auch für iOS zu gelten.

Verwandte Themen