我需要一些iPhone SDK中的ObjectiveC动态内存分配二维数组的例子。示例代码将不胜感激。我想声明一个指针数组,然后每个索引将在运行时声明一个数组。二维动态内存分配 - ObjectiveC
感谢
我需要一些iPhone SDK中的ObjectiveC动态内存分配二维数组的例子。示例代码将不胜感激。我想声明一个指针数组,然后每个索引将在运行时声明一个数组。二维动态内存分配 - ObjectiveC
感谢
它是怪异串通C数组和NSArrays,但它可以做到:
NSMutableArray *myArrays[];
myArrays = malloc(sizeof(NSMutableArray *) * numberOfArrays);
更好的解决方案要么是使用NSArrays的一个NSArray;
NSMutableArray *rows = [NSMutableArray array];
[rows addObject: [NSMutableArray array]];
[rows addObject: [NSMutableArray array]];
[rows addObject: [NSMutableArray array]];
NSMutableArray *row0 = [rows objectAtIndex: 0];
[row0 addObject: [Datum new]];
[row0 addObject: [Datum new]];
[row0 addObject: [Datum new]];
....等....
或者,只使用一个指针数组直接:
Datum **my2DArray = malloc(sizeof(Datum *) * width * height);
然后,任何给定的笛卡尔内my2DArray
坐标是一个简单的位数学:
my2DArray[ x + (y * width) ] = ....;
这将有效地将任何给定的(x,y)坐标转换为线性inde x(实际上,y成为步幅,x成为步幅内的偏移量)。
对于NSArrays,您可以使用这样的事情:
NSMutableArray *array2d = [[NSMutableArray alloc] init];
for (int i = 0; i < d1; i++)
{
NSMutableArray *innerArray = [NSMutableArray array];
[array2D addObject:innerArray];
for (int j = 0; j < d2; j++)
{
[innerArray addObject:myDynamicData];
}
}
如果你的意思是通过动态数据意外的话,请编辑OP解释你的意思是什么。
当然,嗯,C有动态内存分配。看看malloc和realloc。有了这个,你可以分配内存并在需要时调整大小,你只需要跟踪所有的内存使用情况,并且在完成时不要忘记释放()。
你说的是C数组还是NSArrays? – 2010-12-04 16:13:05
NSArrays,我想声明一个指针数组,每个指针将指向一个数组。 – 2010-12-04 16:58:51