2D动态内存分配 - 目标C.

时间:2010-12-04 16:09:58

标签: objective-c memory-management dynamic-data

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

由于

3 个答案:

答案 0 :(得分:4)

串联C数组和NSArrays很奇怪,但可以这样做:

NSMutableArray *myArrays[];
myArrays = malloc(sizeof(NSMutableArray *) * numberOfArrays);

更好的解决方案是使用NSArray的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)坐标转换为线性索引(实际上,y成为步幅,x成为步幅内的偏移量)。

答案 1 :(得分:0)

当然,C有动态内存分配。看看malloc和realloc。有了这个,您可以分配内存并在以后根据需要调整大小,您只需要跟踪所有内存使用情况,并且在完成后不要忘记free()。​​

答案 2 :(得分:-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,准确解释你的意思。