我怎么能表演“SEL fun”

时间:2012-08-17 17:31:57

标签: iphone ios

如果SEL fun是参数

我怎么能这么有趣?

例如

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

3 个答案:

答案 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)

您可以使用以下三种方法:

  1. 使用performSelector:之类的:[target performSelector:fun withObject:nil];
  2. 使用detachNewThreadSelector之类的:[NSThread detachNewThreadSelector:fun toTarget:target withObject:nil];,但它可以在另一个主题上运行。
  3. 使用NSInvocation之类的:
  4. NSInvocation *inv = [[NSInvocation alloc] init];
    [inv setSelector:fun];
    [inv invokeWithTarget:target];