2009-08-23 2 views
0

У меня есть коллекция NSObjects, которую я хочу сохранить в 2D-массиве, сгенерированном во время выполнения. В C# я просто использую некоторые из своих дружественных универсальных контейнеров, но не слишком уверен, что лучший способ сделать это в объективе-c для разработки iphone.2D-массивы в объекте C

Я предполагаю, что NSMutableArray - не лучший маршрут. Мне не нужен массив для роста, я буду знать размер, который я хочу, когда мой менеджер сетки будет создан, но сетка будет строить с высотой и шириной времени выполнения.

Должен ли я что-то делать по строкам 'NSObject ** gridObjects = alloc ...'?

ответ

0

Вы всегда можете использовать обычный материал C в Objective-C (я бы не советовал делать это, если у вас нет веских причин):

NSObject** *twoDArray = malloc(sizeof(NSObject**) * rows); 
for (i = 0; i < rows; ++i) 
    twoDArray[i] = malloc(sizeof(NSObject*) * cols); 

Чтобы изменить размер каждого блока, вы можете использовать realloc (если вы даже необходимо). Не забудьте сделать free после использования.

+0

Это работает, и я использую его как свойство своего класса, но у меня возникают проблемы с назначением значений. Я создал его с типом. Плитка * плитка = [[Плитка выделения] init]; self.grid [x] [y] = плитка; У меня есть ошибка «Типы входных данных при назначении» –

+0

Ах, понял. Необходимая плитка Tile *** –

+1

Будьте осторожны с этим решением, так как оно несовместимо с сборкой мусора. Может использовать NSAllocateCollectable, чтобы обойти это, но я также рекомендую NSArray из NSArrays. Возможно, было бы неплохо написать метод категории для доступа к элементам здесь. –

3

Если вы собираетесь хранить СТРЕЛКИ в 2D-массив, вы должны будете использовать:

NSObject ***gridObjects 

Я бы просто использовать NSArray из NSArray объектов (2D).