2D Динамическое Распределение Памяти - ObjectiveC - PullRequest
0 голосов
/ 04 декабря 2010

Мне нужны примеры динамического выделения памяти для 2D-массива в ObjectiveC в iPhone SDK.Пример кода будет оценен.Я хочу объявить массив указателей, а затем каждый индекс будет объявлять массив во время выполнения.

Спасибо

Ответы [ 3 ]

4 голосов
/ 04 декабря 2010

Странно объединять массивы C и NSArrays, но это можно сделать:

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

Лучшим решением будет использование NSArray из NSArrays;

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 становится смещением внутри шага).

0 голосов
/ 04 декабря 2010

Умм, конечно, C имеет динамическое распределение памяти.Посмотрите на malloc и realloc.При этом вы можете выделять память и изменять ее размер позже, если это необходимо, вам просто нужно отслеживать все использование памяти и не забывать освобождать (), когда закончите.

0 голосов
/ 04 декабря 2010

Для 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];
      }
}

Если вы подразумеваете что-то другое под динамическими данными, то, пожалуйста, отредактируйте ОП, объясняя, что именно вы имеете в виду.

...