2010年12月10日金曜日

変更される可能性のあるクラスのメソッドを呼び出す

任意のクラスのメソッドを呼び出すには下記のように

[testClass testMethod];

等と呼び出せば良いですが、例えば上記の「testClass」がプログラム実行中に動的に変更されてしまう場合は以下のようにします。


objc_object* ptrClass = testClass;
SEL ptrMethod = @selector(testMethod:);
[ptrClass performSelector:ptrMethod withObject:パラメータ]; // 呼び出し


ptrClass = testClass2; // 動的にクラスを変更
ptrMethod = @selector(testMethod2:); // 動的にメソッドを変更
[ptrClass performSelector:ptrMethod withObject:パラメータ]; // 呼び出し


C++に慣れた方であればポインタ変数を任意のクラスにキャストしてメソッド呼び出しを行いそうですが、Objective-Cでは上記のようにします。

なお、withObjectでパラメータを複数渡したい場合は、複数オブジェクトを格納するNSArrayオブジェクトを渡すようにします。
また、afterDelay:で秒数を指定すれば、任意の秒数後にメソッド呼び出しが行われます。

0 件のコメント:

コメントを投稿