Objective-c如何在参数中发送(void)?

时间:2011-03-22 15:41:34

标签: iphone objective-c ipad call

我想知道如何将参数传递给void的“地址”?

- (void) showWithLabel:(id)method {

...
[HUD showWhileExecuting:@selector(method) onTarget:self withObject:nil animated:YES];

}


- (void) test:{
sleep(3)
}

- (void) hello:{

[self showWithLabel:(id)test]
}

但那不起作用(构建错误)

3 个答案:

答案 0 :(得分:4)

要传递选择器,您需要以下关键字:

@selector和SEL。

因此,在您的示例中,它应该是:

- (void) showWithLabel:(SEL)method {

[self showWithLabel:@selector(test)]

要调用选择器:     [target performSelector:method]

正如Kubi指出的那样,你应该对结肠非常小心。 如果没有参数,则没有冒号。 但是,如果你有参数,你必须意识到冒号是选择器名称的一部分。 例如:

-(void) test //no parameter gives @selector(test)

-(void) testWithName:(NSString*)name //1 parameter gives @selector(testWithName:)

-(void) testWithName:(NSString*)name andAge:(int)age //2paramater gives selector gives @selector(testWithName:andAge:)

答案 1 :(得分:2)

没有“虚空”这样的东西。 void是一个C关键字,当应用于指针时,表示指针是无类型的,即类型未知或不重要。我最近注意到一些初学者似乎将一个void方法或函数(即一个不返回值的方法或函数)称为“void”,但这不是常用的。

我无法从您发布的代码中告诉您想要传递的内容或您希望传递的内容。你可以修改你的问题以使其更清楚吗?

答案 2 :(得分:1)

另请注意,我删除了testhello方法中的冒号。在Obj-C中,冒号描述了方法参数,因为没有参数,所以不需要冒号。

- (void) showWithLabel:(SEL)method {
    //...
    [HUD showWhileExecuting:method onTarget:self withObject:nil animated:YES];
}


- (void) test {
    sleep(3)
}

- (void) hello {
    [self showWithLabel:@selector(test)]
}