7

バックグラウンド:

Objective-C で複合辞書データ構造の階層を作成し、NSMutableDictionaryから継承しているため、NSDictionary/NSMutableDictionary が呼び出されるあらゆる場所でこれらのクラスを使用できます。(人々が私が車輪を再発明していると思わないように、それぞれがCFMutableDictionaryRefを使用し、さらにキーをソート順、挿入順などで格納する追加の構造を使用します。) Apple のドキュメントに従って、私はこれらのクラスの他のすべてのメソッドが使用する必要なNSDictionary プリミティブNSMutableDictionary プリミティブ。

ゴール:

私は自分のフレームワークの API をできるだけ完全に文書化するよう努めているので、 (Doxygen によって生成された)カスタム サブクラスの文書化に NS(Mutable)Dictionary の最も一般的なメソッドの説明を含めてほしいと思います。特定のカスタム ディクショナリが変更されずに継承するメソッドだけを別のページで確認する必要があります。さらに、メソッドの実装は NS(Mutable)Dictionary から変更されていませんが、オーバーライドされたプリミティブ メソッドによって引き起こされるさまざまな機能をドキュメントに反映する必要がある場合があります。

問題:

オーバーライドされたメソッドのみが文書化されている場合、エラー/警告は表示されません。継承されたメソッドを文書化するコメントを追加すると、ヘッダー ファイルにメソッド プロトタイプを追加しない限り、Doxygen は文句を言います (その文書を作成しません)。プロトタイプを追加すると、宣言されたメソッドのメソッド定義が含まれていないため、コンパイラは実装が完了したという警告を発行します。明らかに、これはメソッドが親クラスに存在する場合ですが、プロトタイプがサブクラスで本質的に再宣言されているため、コンパイラはその実装に固執しています。

質問:

  • 親クラスから継承されたメソッドの「'X' のメソッド定義が見つかりません」という警告を Xcode/gcc で抑制させることは可能ですか?
  • デラレーションが存在しないメソッドのドキュメントを作成するように Doxygen に強制することは可能ですか? \fnコマンドを使用しようとしましたが、同じ結果が得られました。
  • 私が書いたドキュメントが実際に NSMutableDictionary に適用されると Doxygen を騙して、それをすべてのカスタム サブクラスに表示させることは可能ですか?

編集:

私が知る限り、最初の質問に対する答えはイエスでもありノーでもあります。技術的には、-Wno-protocolオプションを使用する(または Xcode ビルド設定で「不完全な Objective-C プロトコル」警告をオフにする)と、GCC は、すべてのプロトコル メソッドを実装していないように見えるクラスに関するコンパイル時の警告を抑制します。ただし、これにより、必要なすべてのメソッドを実際に実装していないクラスの問題が隠されます。プロトコルを多用するフレームワークを構築する場合、それは実際にはオプションではありません。現在、GCC は、リンクされた (ソースではない) 親クラスから継承されたメソッドを認識していないようです。

4

1 に答える 1

2

私の知る限り、あなたの 3 つの質問に対する答えは、いいえです。

Apple のドキュメントでは、継承されたメソッドがサブクラスのドキュメントに記載されていないことに注意してください。

さらにNSDictionary、 とNSMutableDictionaryは、最も一般的な方法を思い出させる必要があるほど珍しいことではありません。あなたがすでに持っているように、私にとっては既存のドキュメントへのリンクで十分です。

サブクラスでのこれらの一般的なメソッドの特定の動作のポイントについては、 詳細な説明の章に専用のセクションを挿入します。

とにかく、可能な回避策は、継承されたメソッドの宣言と実装の両方を提供することです。しかし、これはドキュメンテーション目的のためだけに少しやり過ぎです:

- (NSArray *) allValues
{
    return [super allValues];
}
于 2009-06-18T09:34:37.140 に答える