Doxygen /コンパイラの警告なしで継承されたObj-Cメソッドを文書化しますか?
-
05-07-2019 - |
質問
背景:
Objective-Cで複合辞書データ構造の階層を作成し、 NSMutableDictionary であるため、これらのクラスは、NSDictionary / NSMutableDictionaryが必要なすべての場所で使用できます。 (ちょうど私が車輪を再発明しているとは思わないので、それぞれがを使用しています。 CFMutableDictionaryRef に加えて、ソートされた順序、挿入順序などでキーを格納するいくつかの追加の構造)Appleのドキュメントに合わせて、必要な NSDictionaryプリミティブおよび NSMutableDictionaryプリミティブこれらのクラスの他のすべてのメソッドが使用します。
目標:
フレームワークのAPIを合理的な範囲で完全に文書化するよう努めているため、 NS(Mutable)Dictionaryの最も一般的なメソッドの説明を含めるためのカスタムサブクラスのドキュメント(Doxygenにより生成)。これにより、ユーザーは特定のメソッドだけで別のページを見る必要がなくなります。カスタム辞書は変更なしで継承します。さらに、メソッドの実装はNS(Mutable)Dictionaryから変更されていませんが、ドキュメントはオーバーライドされたプリミティブメソッドによって引き起こされるさまざまな機能を反映する必要がある場合があります。
問題:
オーバーライドされたメソッドのみが文書化されている場合、エラー/警告は表示されません。継承されたメソッドをドキュメント化するコメントを追加すると、ヘッダーファイルにメソッドプロトタイプを追加しない限り、Doxygenは文句を言います(ドキュメントを生成しません)。プロトタイプを追加すると、コンパイラは宣言されたメソッドのメソッド定義を含まないため、実装が完了したという警告を発行します。明らかに、これはメソッドが親クラスに存在する場合ですが、プロトタイプは基本的にサブクラスで再宣言されているため、コンパイラはメソッドの実装にこだわりを持っています。
質問:
- Xcode / gccが「 'X'のメソッド定義が見つかりません」を抑制することは可能ですか?親クラスから継承されたメソッドの警告?
- 宣言が存在しないメソッドのドキュメントをDoxygenに強制的に作成させることはできますか?
\ fn
コマンドを使用しようとしましたが、同じ結果が得られました。 - Doxygenをだまして、私が書いたドキュメントが実際にNSMutableDictionaryに適用されると考えさせることはできますが、それはすべてのカスタムサブクラスに表示されますか?
編集:
私が知る限り、最初の質問に対する答えは「はい」と「いいえ」の両方です。技術的には、 -Wno- protocol
オプション(またはXcodeビルド設定の「不完全なObjective-Cプロトコル」警告のチェックを外す) does を使用すると、GCCはそうでないクラスに関するコンパイル時の警告を抑制しますすべてのプロトコルメソッドを実装しているようです。ただし、これにより、必要なすべてのメソッドを実際に実行しないクラスの問題が隠されます。プロトコルを大量に使用するフレームワークを構築するには、
解決
私が知る限り、あなたの3つの質問に対する答えは「いいえ」です。
Appleのドキュメントでは、サブクラスのドキュメントに継承されたメソッドが記載されていないことに注意してください。
さらに、 NSDictionary
と NSMutableDictionary
は、最も一般的なメソッドのリマインダーが必要になることも珍しくありません。私にとっては、既にあるように、既存のドキュメントへのリンクで十分です。
サブクラスのこれらの一般的なメソッドの特定の動作のポイントについては、詳細な説明の章に専用セクションを挿入します。
とにかく、可能な回避策は、継承されたメソッドの宣言と実装の両方を与えることです。しかし、それは単に文書化の目的のために少しやり過ぎです:
- (NSArray *) allValues
{
return [super allValues];
}