2009-10-01 9 views

Répondre

6

Cela n'a aucun sens d'initier un NSArray en utilisant initWithCapacity:, car vous ne pouvez pas ajouter d'objets par la suite. Un NSArray avec aucun objet dans a une capacité de facto de 0. Qu'est-ce que vous essayez vraiment de réaliser?

+3

Cette question est sans aucun rapport avec sa réponse. –

+2

J'implémente un cache de taille fixe et je trouve que 'NSArray' correspond à ce critère. Initialiser un tableau vide avec de la capacité a du sens, n'est-ce pas? – mr5

10

Depuis NSArray objets sont immuables (ne peut pas changer les objets qu'ils contiennent) il est inutile d'ajuster la capacité de NSArray s.

La capacité est le nombre d'objets qu'un tableau peut contenir sans réaffecter la mémoire. Il est seulement utilisé pour l'optimisation.

5

Il suffit de créer un NSMutableArray avec initWithCapacity:, de le remplir avec des éléments, puis d'en créer un NSArray.

Vous pouvez utiliser:

NSArray *_immutableArray = [_mutableArray copy]; 
... 
[_immutableArray release]; 

Ou:

NSArray *_immutableArray; 
[_immutableArray initWithArray:_mutableArray]; 
... 
[_immutableArray release]; 

Ou:

NSArray *_immutableArray = [NSArray arrayWithArray:_mutableArray]; 
+0

C'est probablement plus cher que de simplement utiliser une taille par défaut et de le laisser se développer. – Alexander

+0

Mesurez-le et rapportez-le avec des chiffres. –

+0

Je pense qu'obtenir un résultat concluant quant à ce qui est le plus rapide serait vraiment difficile sans analyser le code source. Il y a tellement de variables comme le nombre d'éléments à ajouter, les conditions de mémoire (et donc les performances de realloc), etc. – Alexander

Questions connexes