你能在Objective C中的数组中存储函数吗?

Nsh*_*eky 6 arrays random function objective-c ios

我想创建一个函数数组,以便我可以随机化这些数组发生的顺序.我可以这样做:

NSMutableArray *MyArray = [NSMutableArray arrayWithObjects: function1, function2, function3, nil];
Run Code Online (Sandbox Code Playgroud)

如果我可以做这样的事情那么;

RandomNum = arc4random() %([MyArray count]);
MyArray[RandomNum];
Run Code Online (Sandbox Code Playgroud)

这样随机化调用这些函数的顺序?如何将函数存储在此数组中?

Bar*_*ski 4

至于 ObjC 块,您可以NSArray直接将它们存储在 a 中。普通 C 函数必须包装成NSValue

NSArray *functions = @[[NSValue valueWithPointer:function1], [NSValue valueWithPointer:function2]];
Run Code Online (Sandbox Code Playgroud)

然后您可以按如下方式调用它们,只需确保将其转换为正确的签名即可:

((void (*)(int))[functions[RandomNum] pointerValue])(10);
Run Code Online (Sandbox Code Playgroud)