如果SEL fun是参数
我怎么能这么有趣?
例如
-(id)init:(SEL)fun
{
[target fun];
}
答案 0 :(得分:3)
如果fun
期望没有参数,您可以这样做:
[target performSelector:fun];
如果它需要一个对象参数,你可以这样做:
[target performSelector:fun withObject:someObject];
如果它需要两个对象参数,你可以这样做:
[target performSelector:fun withObject:someObject withObject:anotherObject];
如果它需要三个或更多参数,或者它需要非对象的参数,则必须使用objc_msgSend
,如this answer所述。
答案 1 :(得分:0)
- (id) init:(NSString*)fun{
[target NSSelectorFromNSString(fun)];
}
- (void) methodCaller{
[[MyClass alloc] init:NSStringFromSelector(@selector(method1))];
}
答案 2 :(得分:0)
您可以使用以下三种方法:
performSelector:
之类的:[target performSelector:fun withObject:nil];
detachNewThreadSelector
之类的:[NSThread detachNewThreadSelector:fun toTarget:target withObject:nil];
,但它可以在另一个主题上运行。NSInvocation
之类的: NSInvocation *inv = [[NSInvocation alloc] init];
[inv setSelector:fun];
[inv invokeWithTarget:target];