2009-10-01 12 views

Respuesta

6

No tiene sentido iniciar NSArray usando initWithCapacity:, porque no puede agregar objetos posteriormente. Un NSArray sin objetos tiene una capacidad de facto de 0. ¿Qué estás realmente tratando de lograr?

+3

Esa pregunta tiene relación alguna con su respuesta. –

+2

Estoy implementando un caché de tamaño fijo y descubro que 'NSArray' se ajusta a ese criterio. Inicializar una matriz vacía con capacidad tiene sentido, ¿no? – mr5

10

Dado que NSArray los objetos son inmutables (no se pueden cambiar los objetos que contienen) no sirve de nada ajustar la capacidad de NSArray s.

La capacidad es la cantidad de objetos que una matriz puede contener sin reasignar la memoria. Solo se usa para optimización.

5

Simplemente haga una NSMutableArray con initWithCapacity:, llénela con cosas, y luego haga una NSArray de ella.

puede utilizar cualquiera:

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

O:

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

O:

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

Esto es probablemente más costoso que simplemente usar un tamaño predeterminado y dejarlo expandirse. – Alexander

+0

Mídalo y repórtalo con números. –

+0

Creo que obtener un resultado concluyente sobre cuál es más rápido sería realmente difícil sin analizar el código fuente. Hay tantas variables como el número de elementos para agregar, las condiciones de memoria (y por lo tanto el rendimiento de realloc), etc. – Alexander