iOS グリッド ビューに使用されるインターフェイス/プロトコルを作成しています。クラス内にできるだけ多くの情報をカプセル化しようとしており、クラスとそのサブクラスのユーザーにほとんど情報を残していません。コールバック メソッドまたはデリゲートがどうあるべきかで行き詰まっています。C または C++ では、タッチアップ イベントで呼び出されるメソッドのパラメーターとして関数ポインターを渡す必要がありました。Objective C (かなり新しいものです) では、ブロックとセレクターに困惑しています。私が見たところ、アップルの方法はセレクターを使用することです。したがって、このクラスでは、タッチアップ イベントが検出されたときに何が起こるかを示すセレクターとしてメソッドを設定する必要があります。大規模なサブクラス化は行いたくありません。これにより、再利用性が制限され、このインターフェイスが使用されるたびにより多くのコーディングが必要になるからです。限定コードも含めて、セレクターを使用してこれまでに行ったことを説明しますが、代わりにブロックを使用して同じことを行う方法と、それがなぜ優れているかについての提案をお待ちしています。私はこれをテストしていません。現在設計中です。
@protocol Grid <NSObject>
@required
/*! @brief Initializer for base class */
- (id) init:(UIView *)parent withSelector:(SEL)selector;
/*! @brief Draw the actual view */
- (void) draw:(CGRect) rect;
/*! @brief Reload the data */
- (void) reload;
@end
タイトルは誤解を招くものであり、この質問を投稿してから、Objective-C での動作についてよりよく理解できました。これは、セレクターをプロパティまたはデリゲートとして設定するのではなく、基本クラス、継承、およびポリモーフィズムを抽象化することに関するものです。