文字列とメソッドの相互変換
文字列 → メソッド
SEL sel_registerName(const char *str);
メソッド → 文字列
const char* sel_getName(SEL aSelector);
たとえば、状態に応じたメソッドコールをおこないたいときに、メソッドの詰まったテーブルを用意したりすることがあると思うのですが、SEL型変数はobjectとしてあつかわれない(らしい)ので、これも文字列からの変換が一番妥当かな、と。
で、たとえば、こんな感じ、(当然、配列じゃなくてNSDictionaryなんかも使えますね)
@interface ClassA : NSObject -(void) funcA; -(void) funcB; -(void) funcC; @end @implementation ClassA NSString* methodNames[] = {@"funcA", @"funcB",@"funcC"}; -(void) doAction:(int)condition { [self performSelector:sel_registerName([methodNames[condition] cString])]; }
若干コードの視認性に問題があるような気がしたり、デバッグが面倒な気がしたりしますけれども、結構重宝します。拙作のソフトでは至る所で使用されてるような・・・