Как я могу заполнить NSArray динамически? - PullRequest
15 голосов
/ 08 мая 2009

У меня есть for петля. Внутри этого цикла я хочу заполнить NSArray некоторыми объектами. Но я не вижу никакого метода, который позволил бы мне сделать это. Я заранее знаю, сколько там предметов. Я хочу избежать NSMutableArray, так как некоторые люди говорили мне, что это очень большие накладные расходы и снижение производительности по сравнению с NSArray.

У меня есть что-то вроде этого:

NSArray *returnArray = [[NSArray alloc] init];
for (imageName in imageArray) {
    UIImage *image = [UIImage imageNamed:imageName];
    //Now, here I'd like to add that image to the array...
}

Я посмотрел в документации на NSArray, но как мне указать, сколько там будет элементов? Или я действительно должен использовать NSMutableArray для этого?

Ответы [ 4 ]

28 голосов
/ 08 мая 2009

Да, вам нужно использовать NSMutableArray:

int count = [imageArray count];
NSMutableArray *returnArray = [[NSMutableArray alloc] initWithCapacity:count];
for (imageName in imageArray) {
    UIImage *image = [UIImage imageNamed:imageName];
    [returnArray addObject: image];
    ...
}

РЕДАКТИРОВАТЬ - объявление исправлено

4 голосов
/ 08 мая 2009

Для этого вам нужно будет использовать NSMutableArray , поскольку добавление является мутацией, а NSArray является неизменным.

Вы могли бы сделать заполненный NSMutableArray в NSArray впоследствии ( см. Здесь для обсуждения ), но вы не будете добавлять элементы в обычный старый NSArray в ближайшее время.

3 голосов
/ 08 мая 2009

Это хорошее время для использования NSMutableArray ?

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

2 голосов
/ 09 мая 2009

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

Полагаю, это не будет узким местом в производительности вашего приложения.

...