所以我试图在一个数组中存储一系列方法(如果有意义的话)。
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并且没有任何参数。
答案 0 :(得分:5)
您不能只使用&
运算符从Objective-C函数中创建函数指针。
你想看一下:
任何这些都可以做你想要的。如果您不熟悉选择器(@selector
编译器指令和SEL
类型),那么一定要阅读它(这是一个你需要很多的基本概念)。块是相当新的(从Mac OS X 10.6和iOS 4开始可用),它们将为您节省大量工作,您需要在早期版本的Mac OS X和iOS上使用目标/选择器,NSInvocation或回调函数。
答案 1 :(得分:3)
如果需要传递对C函数的引用,则使用函数指针,但在使用Objective-C对象的方法时,您应该使用selectors和SEL
类型。
您的代码将类似于:
SEL selectors[3];
selectors[0] = @selector(rotate);
selectors[1] = @selector(move);
selectors[2] = @selector(attack);
...
[self performSelector:selectors[n]];