Me pregunto si esto afecta mucho el rendimiento o el consumo de memoria. Necesito un NSMutableArray, y al principio solo puedo adivinar cuántos objetos se agregarán. Alrededor de 3 a 5 tal vez. Así que lo creo así:¿Cuánto importa si creo un NSMutableArray con capacidad = 3 en lugar de capacidad = 50?
NSMutableArray *arr = [[NSMutableArray alloc] initWithCapacity:3];
¿Qué sucede exactamente aquí, al crearlo con una capacidad de 3 en lugar de 50, por ejemplo? ¿Sería una mala idea crearlo con una capacidad de 1, sabiendo que habrá al menos 20 elementos? ¿O eso no es lo suficientemente importante como para causarle dolores de cabeza? Tengo 10 de estas matrices en mi aplicación y todas tienen que cargarse al inicio.
¡grandes detalles! las otras respuestas también fueron geniales. nunca fue tan difícil elegir uno como aceptado. todos votaron. ¡gracias a todos! –
Con todo respeto, creo que esta respuesta es incorrecta. Aunque la capacidad se utiliza para dar pistas en ciertos casos, no es el caso que al crear una matriz mutable con una capacidad de un gigabyte se asigne inmediatamente un gigabyte de memoria. Si no me crees, pruébalo tú mismo. NSMutableArray * bigArray = [[NSMutableArray alloc] initWithCapacity: 1024 * 1024 * 1024]; if (! BigArray) { NSLog (@ "¡La matriz no se creó!"); } else { NSLog (@ "Sí, se creó."); } Si realmente LLENAS esta matriz, verás un aumento en el uso de la memoria. No antes. – peterb
La documentación de initWithCapacity indica que devuelve "una matriz inicializada con suficiente memoria para contener objetos numItems". Parecería haber alguna discrepancia entre lo que peterb ha observado y lo que afirma la documentación. – fbrereto