如果 SEL fun 是一个参数
我怎么能玩得这么开心?
例如
-(id)init:(SEL)fun
{
[target fun];
}
如果fun
不需要参数,您可以这样做:
[target performSelector:fun];
如果它需要一个对象参数,您可以这样做:
[target performSelector:fun withObject:someObject];
如果它需要两个对象参数,你可以这样做:
[target performSelector:fun withObject:someObject withObject:anotherObject];
如果它需要三个或更多参数,或者如果它需要不是对象的参数,则必须使用,如this answerobjc_msgSend
所解释的那样。
您可以为此使用三种方法:
performSelector:
喜欢:[target performSelector:fun withObject:nil];
detachNewThreadSelector
like:[NSThread detachNewThreadSelector:fun toTarget:target withObject:nil];
但它将在另一个线程上工作。NSInvocation
类似:NSInvocation *inv = [[NSInvocation alloc] init];
[inv setSelector:fun];
[inv invokeWithTarget:target];
- (id) init:(NSString*)fun{
[target NSSelectorFromNSString(fun)];
}
- (void) methodCaller{
[[MyClass alloc] init:NSStringFromSelector(@selector(method1))];
}