セレクタ(メソッド名)はソースコード上では、
メッセージキーワードを書き並べたものとして表されますが、
プログラム上では、別の形に変換されています。
@selectorコンパイラ指示子を用いる事で、
内部表現をSEL型のオブジェクトとして取得することでき、
これを用いることで、好きなタイミングでメソッドを実行することができます。
// @selector
SEL sel1 = @selector(func) //引数なし
SEL sel2 = @selector(func:) //引数1個
SEL sel3 = @selector(func:var2:) //引数2個
SELオブジェクトに格納したメソッドの実行には
performSelectorを用いる。
第一引数はSEL第二引数、第三引数はSELオブジェクトの指すメソッドに渡す引数。
//引数なし
– (id)performSelector:(SEL)aSelector;
//引数一個
– (id)performSelector:(SEL)aSelector withObject:(id)object;
//引数二個
– (id)performSelector:(SEL)aSelector withObject:(id)object1 withObject:(id)object2;
//呼び出し
[obj1 performSelector: sel1]; //
[obj2 performSelector: sel2
withObject: var1]; //
[obj3 performSelector: sel3
withObject: var1];
withObject: var2]; //
SELオブジェクトはあくまでもメソッド名に相当するものなので
最終的に呼び出される関数は、
performSelectorを呼び出すオブジェクト(例:obj1〜obj3)の型によって決まる。
ピンバック: 【Objective-Cが襲いかかってきた】IOS7+Xcode開発_TODOアプリ_作成メモ(1) プラスボタンのコード | For Want Of A Better Word