Wenn ich etwas nicht vermisse, scheint es willkürlich, in welcher .h-Datei ich die Protokolldefinition setze. Ich frage mich sogar, ob es in seiner eigenen .h-Datei sein könnte ... (in Java ist es in einer eigenen Datei)Ziel-C-Protokoll in einer eigenen .h-Datei definiert?
Antwort
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.
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.
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
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).
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.
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.
- 1. Wann sollten Konstanten in ihren eigenen Dateien definiert werden?
- 2. Vorschau einer eigenen Anwendung
- 3. Java-Compilerfehler: "öffentlicher Typ .. muss in einer eigenen Datei definiert sein"?
- 4. XDocument get-Element, das seinen eigenen Namespace definiert
- 5. Hinzufügen einer Kategorie zu meiner eigenen Klasse
- 6. Neustarten einer Website von einer eigenen Webseite
- 7. Ändern Sie ein Attribut einer Funktion in ihrem eigenen Körper?
- 8. Problem beim Aufrufen einer Methode in einer eigenen Klasse
- 9. In Bezug auf Erstellung einer eigenen Klasse Exception in Java
- 10. Erstellen einer eigenen Kameraanwendung + Automatische Bildaufnahme
- 11. anzeigen Nachricht in einer anderen Komponente definiert
- 12. JAVA: Referenz in einer Schleife definiert
- 13. Export Variablen in einer anderen Datei definiert
- 14. Kann ich einen Typ innerhalb einer eigenen Typdefinition verwenden?
- 15. Mit einer Klasse innerhalb ihrer eigenen Erklärung
- 16. Mit eigenen Enum in Einstellungen
- 17. Setzen Sie keine Symbole aus einer verwendeten Bibliothek in einer eigenen statischen Bibliothek frei.
- 18. Erstellen ein Objekt einer Klasse in einem eigenen statischen Initialisierer
- 19. Wie man ein Glas mit einer eigenen MANIFEST.MF in Eclipse
- 20. Dynamische Verwendung einer Klassenmethode in einer Modul Cython Erweiterung definiert
- 21. Eine Struktur in einer eigenen .cpp definieren und dann in main verwenden
- 22. ComboBox mit eigenen Objekten
- 23. Wie kann man auf Variablen zugreifen, die in einer Funktion in einer anderen Funktion definiert und definiert sind?
- 24. Objekte eigenen Tag abrufen
- 25. Linux. SOL_NETLINK nicht definiert
- 26. Java definiert oder initialisiert Attribute einer Klasse
- 27. Wie mache ich meinen eigenen syntaktischen Zucker in Swift?
- 28. Eigenen MANIFEST.MF in Java-Servlet lesen
- 29. Klasse ohne Angabe einer Basisklasse definiert?
- 30. einen Header mit einer vertikalen Linie definiert
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