最終更新: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つ

関数

  • NSStringFromSelector?
  • NSSelectorFromString?

関連

参考