最終更新:2012-09-25 (火) 02:09:45 (4231d)
Objective-C/セレクタ
Top / Objective-C / セレクタ
メソッドを特定する名前の内部表現(コンパイル時)
セレクタ == メッセージセレクタ == メソッド名
[obj hello];//メッセージング SEL helloSelector = @selector(hello);//メソッド名を指定 //SEL helloSelector = NSSelectorFromString(@"hello");//文字列からセレクタを生成する場合 [obj performSelector:helloSelector];//セレクタ経由で呼び出す
メモ
- Objective-Cでは、セレクタには2つの意味があります。
- オブジェクトに送信されるソースコードのメッセージで使われる場合は、セレクタは単にメソッドの名前を指します。
- しかし、ソースコードがコンパイルされるときは、セレクタはメソッド名に代わる一意の識別子を指します。コンパイル済みのセレクタはSEL型です。
- 同じ名前のメソッドは、すべて同じセレクタを持ちます。セレクタを使用して、オブジェクトに対してメソッドを呼び出すことができます。
SEL
- コンパイル済みのセレクタ
typedef struct objc_selector *SEL;
- SELオブジェクトに格納したメソッドの実行にはNSObjectのperformSelectorを用いる。
- NSObject
- (id)performSelector:(SEL)aSelector - (id)performSelector:(SEL)aSelector withObject:(id)anObject - (id)performSelector:(SEL)aSelector withObject:(id)anObject withObject:(id)anotherObject
@selector
SEL selector = @selector(メソッド名)
- そのセレクタがコンパイル時に変換される内部表現を、プログラム上で扱えるようにするコンパイラ指示子
- 指定したメソッドの名前が存在するかどうかは、メソッドを呼び出すときに、実行時に判定されるため、コンパイル時には評価されない
メソッド名
- hoge - 引数なし
- hoge: - 引数1つ
- hoge:fuga: - 引数2つ
関数
関連
- IMP?