Objective-C中的函数指针问题

时间:2011-06-18 21:45:41

标签: objective-c function-pointers

所以我试图在一个数组中存储一系列方法(如果有意义的话)。

void *pointer[3];
pointer[0] = &[self rotate];
pointer[1] = &[self move];
pointer[2] = &[self attack];
//...

我想要做的是拥有一系列东西,并根据数组中对象的类型,调用某个方法。而不是有一堆if声明说:

if ([[myArray objectAtIndex:0] type] == robot]) {
     //Do what robots do...
}
else if (...) {
}
else {
}

在计时器中有这个我希望能做到这样的事情:

pointer[[[myArray objectAtIndex:0] type]]; //This should invoke the appropriate method stored in the pointer.

现在上面的代码(第一个代码块):

  

Lvalue需要作为一元'&'操作数。

如果您需要任何澄清,请询问。

另外,只是为了让你知道我调用的所有方法都是void并且没有任何参数。

2 个答案:

答案 0 :(得分:5)

您不能只使用&运算符从Objective-C函数中创建函数指针。

你想看一下:

任何这些都可以做你想要的。如果您不熟悉选择器(@selector编译器指令和SEL类型),那么一定要阅读它(这是一个你需要很多的基本概念)。块是相当新的(从Mac OS X 10.6和iOS 4开始可用),它们将为您节省大量工作,您需要在早期版本的Mac OS X和iOS上使用目标/选择器,NSInvocation或回调函数。

答案 1 :(得分:3)

如果需要传递对C函数的引用,则使用函数指针,但在使用Objective-C对象的方法时,您应该使用selectorsSEL类型。

您的代码将类似于:

SEL selectors[3];
selectors[0] = @selector(rotate);
selectors[1] = @selector(move);
selectors[2] = @selector(attack);

...

[self performSelector:selectors[n]];