ADC に日本語解説あり。
Objective-C 2.0プログラミング言語: メソッドアドレスの取得
例えば -[NSImage setFlipped:YES] の呼び出しはこんな感じ。
void(*func1)(id, SEL, BOOL); NSImage aImage = ...; func1 = (void(*)(id, SEL, BOOL))[aImage methodForSelector:@selector(setFlipped:)]; func1(aImage, @selector(setFlipped:), YES);
戻り値がある時は? -[NSString componentsSeparatedByString:] を例にコーディングしてみる。こんな感じ。
NSString* str = @"CAT DOG MONKEY";
NSArray* (*func1)(id, SEL, NSString*);
func1 = (NSArray* (*)(id, SEL, NSString*))[str methodForSelector:
@selector(componentsSeparatedByString:)];
NSArray* items = func1(str, @selector(componentsSeparatedByString:), @" ");
NSLog(@"%@", items);
実行結果(デバッガコンソール)
(
CAT,
DOG,
MONKEY
)
-[methodForSelector:] の代わりに +[instanceMethodForSelector:] も使える。
func1 = (NSArray* (*)(id, SEL, NSString*))[NSString instanceMethodForSelector:@selector(componentsSeparatedByString:)];
(参考)メソッドと関数呼び出しの内部