Objective-C @selector SELクラス

セレクタ(メソッド名)はソースコード上では、
メッセージキーワードを書き並べたものとして表されますが、
プログラム上では、別の形に変換されています。

@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)の型によって決まる。

akatukisiden について

フリーランスプログラマ 使用言語はC++,C#とそのつなぎのC++/CLI 専門はクライアントアプリ開発
カテゴリー: iOS, Objective-C パーマリンク

Objective-C @selector SELクラス への1件のフィードバック

  1. ピンバック: 【Objective-Cが襲いかかってきた】IOS7+Xcode開発_TODOアプリ_作成メモ(1) プラスボタンのコード | For Want Of A Better Word

コメントを残す