2010-12-04 100 views
0

我需要一些iPhone SDK中的ObjectiveC动态内存分配二维数组的例子。示例代码将不胜感激。我想声明一个指针数组,然后每个索引将在运行时声明一个数组。二维动态内存分配 - ObjectiveC

感谢

+1

你说的是C数组还是NSArrays? – 2010-12-04 16:13:05

+0

NSArrays,我想声明一个指针数组,每个指针将指向一个数组。 – 2010-12-04 16:58:51

回答

4

它是怪异串通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成为步幅内的偏移量)。

-1

对于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解释你的意思是什么。

0

当然,嗯,C有动态内存分配。看看malloc和realloc。有了这个,你可以分配内存并在需要时调整大小,你只需要跟踪所有的内存使用情况,并且在完成时不要忘记释放()。