セレクタ
セレクタは、オブジェクトに対して実行するメソッドを選択するために使用される名前であり、またはソースコードをコンパイルするときに名前を置き換える、一意の識別子です。それ自体はセレクタは何もしません。それは単にメソッドを識別するだけです。セレクタメソッド名が単純な文字列とは違うものは、コンパイラはセレクタが一意であることを確認するということです。セレクタが便利なのは、(実行時と併せて) それは、与えられた名前で、それが使われているいずれかのクラスのメソッドの適切な実装を自動的に指し、動的な関数ポインタのような役割を果たしていることです。メソッド run のセレクタを持っていた場合、クラスの Dogs、Athlete、そして ComputerSimulation(それぞれがメソッド run を実装する) があったとしましょう。セレクタは、実装がそれぞれに異なっていても、メソッド run を呼び出すためのそれぞれのクラスのインスタンスに使用されます。
セレクタの取得
コンパイル済みのセレクタはタイプ SEL です。セレクタを取得するには一般的な方法が2つあります。
- コンパイル時に、コンパイラディレクティブ @selector を使用します。
- 実行時には、文字列がメソッドの名前である NSSelectorFromString 関数を使用して下さい。
SEL aSelector = @selector(methodName);
SEL aSelector = NSSelectorFromString(@"methodName");
実行時まで名前を知らないかもしれないメッセージをコードが送信したいときは、文字列から作成されたセレクタを使用して下さい。
セレクタの使用
performSelector: とその他類似のメソッドで、セレクタを使用してメソッドを呼び出すことができます。
SEL aSelector = @selector(run); [aDog performSelector:aSelector]; [anAthlete performSelector:aSelector]; [aComputerSimulation performSelector:aSelector];
(ターゲットアクション・デザインパターンを使用するオブジェクトを実装する場合など、特殊な状況では、このテクニックを使用して下さい。通常は、単に直接メソッドを呼び出します。)
前提条件の記事
関連記事
既出の議論
オブジェクトでの作業
次の章
前の章