Pergunta

Eu tenho um loop for. Dentro desse loop eu quero preencher um NSArray com alguns objetos. Mas eu não vejo qualquer método que iria me deixar fazer isso. Sei de antemão quantos objetos existem. Eu quero evitar uma NSMutableArray, uma vez que algumas pessoas me disseram que é uma grande sobrecarga e desempenho-brake em comparação com NSArray.

Eu tenho algo parecido com isto:

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...
}

Eu olhei na documentação para NSArray, mas como faço para especificar quantos elementos vão estar lá? Ou devo realmente usar NSMutableArray para isso?

Foi útil?

Solução

Sim, você precisará usar um NSMutableArray:

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

EDIT - declaração fixa

Outras dicas

Você vai precisar usar um NSMutableArray por isso, porque a adição é mutação e NSArray é imutável.

Você poderia fazer um NSMutableArray povoada em um NSArray depois ( veja aqui para uma discussão ), mas você não vai adicionar itens a uma NSArray regular de idade em breve.

Será que isso é um bom momento para usar um NSMutableArray ?

Eu sei que você mencionou que você gostaria de evitá-lo, mas às vezes há uma razão para coisas como esta.

Eu aconselharia a otimização somente quando você sabe NSMutableArray é , causando-lhe um ponto de performance, mas se for, você sempre pode criar um aray estática a partir de uma matriz mutável depois de ter preenchido-lo. Depende se o impacto no desempenho é causado por você posterior utilização do NSMutableArray ou apenas criando-lo.

Meu palpite é que isso não vai ser o gargalo de desempenho em sua aplicação.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top