私が何かを紛失していない限り、それは.hファイルでプロトコル定義を置くことは任意であると思われます。私はそれが自分の.hファイルであることができるかどうか疑問に思っています...(Javaでは、それはそれ自身のファイルにあります)objective-cプロトコルは独自の.hファイルで定義されていますか?
答えて
私はどこかで定義され、コンパイルすると、定義されます。 Objective-CにはJavaのような "ClassName.java"のような規則はありません。
これは、プライベートメソッド/プロパティのようなもののためにcategoriesのようなことをしたいときに非常に役に立ちます。
In Objective-Cは同じです。プロトコルはクラス間で共有されるメソッドのリストなので、プロトコルは、対応する実装のないメソッドのリストのみです。それらは他の誰かによって実装されることを意図しています。
プロトコルは通常自分の経験では自分の.hファイルで定義されています。しかし、それらはshared.hファイルで定義することができます。プロトコルのユーザーがプロトコルを共有ファイル形式で採用できるようにするのは難しいですし、さらにAPIを乱雑にしてしまいます。プロトコルがそれ自身の.hファイルであれば、ドキュメントと使用法はおそらくもっと簡単でしょう。
また、他のクラス宣言を持つ.hファイルではなく、プロトコル.hファイルをインクルードする必要がある場合は、ポリモフィックな実装のようにプロトコルを使用するとオーバーヘッドが少なくなります。私いくつかあるだろう、このアイデアの正確なコスト/省でわからないんだけど、私が読んだ(小さいバイナリ?)
よろしく、 フランク
私は、プロトコルの配置が依存だと思いますどのようにそれを使用している。多くの場合、プロトコルは別のクラスのデリゲートまたはデータソースの機能を定義するために使用されます。そうだとすれば、プロトコル定義を他のクラスの先頭に置くことは安全だと思います。
共有ベースクラスの代わりにプロトコルを定義する場合は、おそらく別のファイルに配置する必要があります。例えば、私は "Operation"プロトコルを実装するいくつかの異なるクラスを持っています。私の他の関数のいくつかは、プロトコルを実装するオブジェクトを受け取ることを期待しており、実際のクラスについてあまり気にしません。その場合、独自のヘッダーファイルにプロトコル定義を入れて、独自のヘッダーファイルに含めることができます。
ベニーですが、技術的にはと定義されています。どこに置いてもと定義されています(使用前のどこかに含まれている限り)。
これはObjective-Cのスタイルの問題です。私は本当に "適切な"方法は、プロトコルのための別々の.hファイルを作成することであり、私がやることだけである他のもの(例えばNSCodingのようなもの)に属していないプロトコルを作っていたとします。一方、私はプロトコル(または非公式プロトコル、NSObjectのカテゴリを使用して)を作成するとき、NSTableViewのデータソースの非公式プロトコルのような別のクラスに結びついています。このような状況では、簡単にするために宣言をそのクラスのヘッダーファイルに入れています。
デリゲート、プロトコル、セレクタについては、AppleのCommunicating with Objectsも参照してください。 Mac OS Xの下に掲載されていますが、ほとんどの場合(すべてではないにしても)、iOSにも当てはまります。
- 1. 各.hファイルには、他の.hファイルに定義されている構造体が必要ですか? (C)
- 2. .hファイルの値が.rcファイルに定義されていません
- 3. コントローラの.hファイルで定義されたIBOutletsがインスペクタで表示されない
- 4. Cプロジェクト内で独自のHEADER(.h)ファイルをインポートする方法
- 5. ObjectiveC UISwitchはデフォルトでOFFに設定されています
- 6. 独自の定義で使用される変数?
- 7. VNCにはどのプロトコルコードが定義されていますか? (RFBプロトコル)
- 8. 独自のプロトコルを拡張するのはなぜですか?
- 9. CDT Eclipse:定義されていない変数.hファイルも含まれています
- 10. C++関数プロトタイプが.hファイルのクラス定義で宣言されていますが、.cppで定義されていない関数
- 11. Cヘッダファイル(.h)に自己参照構造体を定義していますか?
- 12. XLSXファイルはUTF-8で定義されていますか?
- 13. Angular独自のディレクティブを定義する
- 14. 独自のファイル形式で使用されているDEFLATEアルゴリズムバリアントの特定
- 15. WCFはService ReferenceのDataObjectの独自のバージョンを定義しています
- 16. 私は定数の数百人をマクロとして定義されている.hファイル持って
- 17. 自己は定義されていませんか?
- 18. 独自の通信プロトコルのツールチェーン
- 19. DevToolプロトコルによって提供される `resourceType`値はどのように定義されていますか?
- 20. JPanelはクラス図で独自のクラスとして表されていますか?
- 21. 独自のクラス内に独自のブートストラップクラスを定義することは可能ですか
- 22. MEFプラグインには独自の設定ファイルがありますか?
- 23. 定義されていないシンボルは、.cppファイルで定義されていますが、
- 24. RichTextBoxのハイパーリンクで独自のプロトコルを使用する方法は?
- 25. pandas(python)で独自のfillメソッドパラメータを定義する方法は?
- 26. CPPUnitアクセスはCファイルで定義されています
- 27. 私の.hファイルで定義されている構造体の3D配列にアクセスできない
- 28. いくつかのメソッドは.hファイルで宣言されていません
- 29. ビルド定義cURLプロトコル "D"はlibcurlでサポートされていないか無効になっていません
- 30. Pythonロギングは独自のスレッドで実行されますか?
私はクラスの数で書き直されたプロトコルを見つけたコードレビューに取り組んでいました。プロトコルを定義するための別個のファイルを作成しましたが、そのファイルをインポートしませんでした。あなたの答え "(それが使用される前のどこかに含まれている限り)。ありがとう+ – Alok