-2

如果 SEL fun 是一个参数

我怎么能玩得这么开心?

例如

-(id)init:(SEL)fun
{
  [target fun];
}
4

3 回答 3

3

如果fun不需要参数,您可以这样做:

[target performSelector:fun];

如果它需要一个对象参数,您可以这样做:

[target performSelector:fun withObject:someObject];

如果它需要两个对象参数,你可以这样做:

[target performSelector:fun withObject:someObject withObject:anotherObject];

如果它需要三个或更多参数,或者如果它需要不是对象的参数,则必须使用,如this answerobjc_msgSend所解释的那样。

于 2012-08-17T17:37:44.950 回答
0

您可以为此使用三种方法:

  1. 使用performSelector: 喜欢:[target performSelector:fun withObject:nil];
  2. 使用detachNewThreadSelectorlike:[NSThread detachNewThreadSelector:fun toTarget:target withObject:nil];但它将在另一个线程上工作。
  3. 使用NSInvocation类似:

NSInvocation *inv = [[NSInvocation alloc] init];
[inv setSelector:fun];
[inv invokeWithTarget:target];

于 2012-08-17T17:51:25.420 回答
0
- (id) init:(NSString*)fun{

[target NSSelectorFromNSString(fun)];

}

- (void) methodCaller{
        [[MyClass alloc] init:NSStringFromSelector(@selector(method1))];
}
于 2012-08-17T17:46:43.277 回答