是否可以在objective-c?
中声明一个具有全局范围的可变长度数组我正在制作一个世界级的游戏,它将世界地图初始化为三维整数数组。虽然它只是一个二维侧卷轴,但是列表的第三个维度表明哪一块块位于前两个维度给出的坐标
在初始化函数之后,调度了一个方法nextFrame:我正在使用cocos2d和CCDirector调度方法。我想知道如何将int [] [] [] map数组从初始化函数传递给nextFrame函数
我尝试使用全局(静态关键字)声明,但得到一个错误,说全局数组不能是可变长度
我所指的实际代码行是:
int map[xmax][ymax][3];
其中xmax和ymax是定义舞台的坐标列表中最远的x和y坐标。
我想以某种方式将它们传递给nextFrame:,这是在
中安排的[self schedule:@selector(nextFrame:)];
我意识到我可以使用NSMutableArray,但NSMutableArray对于三维整数列表来说有点令人头疼(我必须使用包装数字来处理所有内容......)。有没有办法用整数数组做这个?
答案 0 :(得分:0)
我尝试使用global(static keyword) 声明,但说错了 全局数组不能变量 长度
但是全局数组指针可以指向可变长度的数组。
答案 1 :(得分:0)
您不能在C中拥有静态分配的动态维度全局数组(其中Objective C是一个干净的超集)。但是,您可以在运行时使用全局指针,malloc和数组索引算法来使用任何长度或大小的全局数组(最多可用内存)。
static int *map = NULL;
...
map = malloc (dim1 * dim2 * dim3 * sizeof(int)); // in some initialization method
if (map == NULL) { /* handle error */ } // before first array access
...
myElement = map[ index3 + dim2 * ( index2 + dim1 * index1 ) ]; // some macro might be suitable here
或者您可以使用Objective C getter和setter方法检查每次访问时的数组和数组边界,因为方法可以返回纯C数据类型。
另一种选择,如果你知道你想要的最大尺寸并且愿意使用(浪费)那么多的内存,那就是静态分配max数组,如果程序试图设置则抛出异常大于你允许的最大值的东西