Как я могу заполнить NSArray динамически?
У меня есть цикл 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
для этого?
Ответы
Ответ 1
Да, вам нужно использовать NSMutableArray
:
int count = [imageArray count];
NSMutableArray *returnArray = [[NSMutableArray alloc] initWithCapacity:count];
for (imageName in imageArray) {
UIImage *image = [UIImage imageNamed:imageName];
[returnArray addObject: image];
...
}
EDIT - декларация исправлена
Ответ 2
Вам нужно использовать NSMutableArray, потому что добавление является мутацией и NSArray является неизменным.
Теперь вы можете сделать заполненный NSMutableArray
в NSArray
(см. здесь для обсуждения), но вы не будете добавление элементов в обычный старый NSArray
в ближайшее время.
Ответ 3
Было бы неплохо использовать NSMutableArray?
Я знаю, что вы упомянули, что хотите избежать этого, но иногда есть причина для таких вещей.
Ответ 4
Я бы посоветовал оптимизировать только тогда, когда вы знаете, что NSMutableArray
вызывает у вас успех, но если это так, вы всегда можете создать статический арай из изменяемого массива после его заполнения. Это зависит от того, вызвано ли ваше поражение результатом последующего использования NSMutableArray
или просто путем его создания.
Я предполагаю, что это не будет узким местом производительности вашего приложения.