2010-12-04 81 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。有了這個,你可以分配內存並在需要時調整大小,你只需要跟蹤所有的內存使用情況,並且在完成時不要忘記釋放()。