Как сделать вектор C или массив из NSArray?

Это возможно? Я не видел метода, который генерировал бы простой старый вектор C или массив. У меня есть только объекты NSNumber в моем массиве, которые мне нужны как вектор C или массив.


person dontWatchMyProfile    schedule 05.05.2010    source источник
comment
возможный дубликат stackoverflow.com/questions/1011711/nsarray-to-c-array   -  person Björn    schedule 05.05.2010


Ответы (2)


Альтернативой ответу mouviciel является использование NSArray getObjects:range:.

id cArray[10];
NSArray *nsArray = [NSArray arrayWithObjects:@"1", @"2" ... @"10", nil];

[nsArray getObjects:cArray range:NSMakeRange(0, 10)];

Или, если вы не знаете, сколько объектов находится в массиве во время компиляции:

NSUInteger itemCount = [nsArray count];
id *cArray = malloc(itemCount * sizeof(id));

[nsArray getObjects:cArray range:NSMakeRange(0, itemCount)];

... do work with cArray ...

free(cArray);
person dreamlax    schedule 05.05.2010

Если вам нужен массив C для переноса объектов, вы можете объявить его как:

id cArray[ ARRAY_COUNT ];

or

id * cArray = malloc(sizeof(id)*[array count]);

Затем вы можете заполнить его с помощью цикла:

for (int i=0 ; i<[array count] ; i++)
    cArray[i] = [array objectAtIndex:i];
person mouviciel    schedule 05.05.2010
comment
Объекты должны сохраняться по мере их помещения в массив c (т.е. [cArray[i]retain]), потому что NSArray может быть освобожден, тем самым освобождая все содержащиеся в нем объекты. - person yabada; 05.05.2010
comment
Использование getObjects:range: было бы быстрее. - person dreamlax; 05.05.2010