3

再利用可能なコードの単純なセットを開発しています。メソッドのセットをグループ化し、実行時にユーザーにデータを要求するプロトコルを作成しました。

デリゲートの設定は必須だと思います。理由を示すアサートをスローして、実行時に開発者にデリゲートを設定させることはできますか?

アサートを使用してクラスのユーザーを強制することは良い方法ですか? 設計レベルの欠陥はありますか?

4

2 に答える 2

5

最初の「グッドプラクティス」の質問:

  • 実際にそうでない限り、メソッドを必須にしないでください。
  • そうでない場合は、メソッドをオプションにしないでください。

  • 批判的なものではなく、より多くの意見です

    • initWithDelegate:デリゲートが必要な場合はメソッドを提供する
    • 調査するまでデリゲート パターンがあることを知らないデータ構造によく出くわします。具体的なinit方法で、より早く気づきます。

@requiredプロトコルにインジケーターを追加するだけで、コンパイル時に警告を発生させることができます。

@protocol SuperAwesomeProtocol <NSObject>

@required
-(void) requiredMethod1;
-(void) requiredMethod2;

@optional
-(void) optionalMethod1;
-(void) optionalMethod2;

@end

//and making your delegate specific:
@property (nonatomic, assign) id<SuperAwesomeProtocol> delegate;

以下を使用して、ランタイム アサートを引き続き発生させることができます。

if (!delegate || ![delegate respondsToSelector:@selector(requiredMethod1)])
{
    //Assertion failure
}
于 2012-11-27T15:14:16.123 に答える
1

はい、アプリケーションでプロトコルを使用することをお勧めします。

プロトコルは、任意のクラスで実装できるメソッドを宣言します。

以下はプロトコルの使用が良い状況です。

  1. 他の人が実装することが期待されるメソッドを宣言する
  2. クラスを隠しながらオブジェクトへのインターフェースを宣言する
  3. 階層的に関連していないクラス間の類似性をキャプチャするため
于 2012-11-27T15:34:29.560 に答える