他の誰かが書いたソースコードを見ていると、次の行に興味をそそられます。
@interface UITableView (MyTableViewGestureDelegate)
今、私は以前にこれだけを見ました:
@interface MyTableView : UITableView <MyTableViewGestureDelegate>
だから私は少し混乱しています。
何を見ているのかについてのアイデアはありますか?
ベン
他の誰かが書いたソースコードを見ていると、次の行に興味をそそられます。
@interface UITableView (MyTableViewGestureDelegate)
今、私は以前にこれだけを見ました:
@interface MyTableView : UITableView <MyTableViewGestureDelegate>
だから私は少し混乱しています。
何を見ているのかについてのアイデアはありますか?
ベン
これはクラスカテゴリの宣言です。カテゴリを使用すると、クラスの実装を複数のファイルに分割したり、既存のクラスにメソッドを追加したりできます。
カテゴリー宣言です。
カテゴリを使用すると、既存のクラスにメソッドを追加できます。ソースがないクラスにもメソッドを追加できます。カテゴリは、サブクラス化せずに既存のクラスの機能を拡張できる強力な機能です。カテゴリを使用すると、独自のクラスの実装を複数のファイルに分散することもできます。クラス拡張は似ていますが、追加の必要な API を、プライマリ クラスの @interface ブロック内以外の場所でクラスに対して宣言できるようにします。
カテゴリ インターフェイスの宣言は、クラス インターフェイスの宣言と非常に似ていますが、カテゴリ名がクラス名の後の括弧内にリストされ、スーパークラスが言及されていない点が異なります。そのメソッドがクラスのインスタンス変数にアクセスしない場合を除き、カテゴリはそれが拡張するクラスのインターフェイス ファイルをインポートする必要があります。
一般的な構文:
#import "ClassName.h"
@interface ClassName ( CategoryName )
// method declarations
@end
カテゴリは、クラスの追加のインスタンス変数を宣言できないことに注意してください。メソッドのみが含まれます。ただし、クラスのスコープ内のすべてのインスタンス変数も、カテゴリのスコープ内にあります。これには、@private と宣言されたものも含め、クラスによって宣言されたすべてのインスタンス変数が含まれます。
クラスに追加できるカテゴリの数に制限はありませんが、各カテゴリ名は異なる必要があり、それぞれが異なるメソッド セットを宣言および定義する必要があります。
MyTableView : UITableView < MyTableViewGestureDelegate >
あなたのクラス MyTableView - UITableView のサブクラス -という名前のプロトコルを実装すると言いますMyTableViewGestureDelegate
UITableView (MyTableViewGestureDelegate)
という名前のクラスのカテゴリを 作成していると言っていますUITableView
MyTableViewGestureDelegate