/ / Entendiendo arrayWithCapacity: método en NSMutableArray - objectivo-c, nsmutablearray, nsrangeexception

Entendiendo arrayWithCapacity: método en NSMutableArray - objectivo-c, nsmutablearray, nsrangeexception

Estoy teniendo dificultades para entender un método en la clase NSMutableArray de Objective-C ". Creé una matriz usando el método arrayWithCapacity: static de esta clase, así:

NSMutableArray * myArray = [NSMutableArray arrayWithCapacity: 10];

Luego intenté acceder a un elemento dentro de la matriz:

id myVariable = myArray[5];

Y eso es lo que obtengo:

*** Terminating app due to uncaught exception "NSRangeException", reason: "*** -[__NSArrayM objectAtIndex:]: index 5 beyond bounds for empty array"

¿Por que sucede? ¿Entendí mal algo acerca de la descripción del método?

Gracias por la ayuda.

Respuestas

14 para la respuesta № 1

Utilizando arrayWithCapacity:10 significa que internamente, la matriz se configurará para contener 10 objetos. Pero todavía no tiene objetos en ella.

Normalmente, se crea una matriz vacía y se configura parasostenga sólo unos pocos objetos. A medida que agrega más y más objetos, es necesario cambiar el tamaño de la matriz interna. Esto significa que se debe colocar en el centro más memoria, luego los objetos antiguos se mueven a la nueva memoria y se limpia la memoria antigua.

Si sabe que la matriz contendrá X número de objetos, usando arrayWithCapacity Permite que la matriz sea más eficiente. Aún puedes agregar más objetos pero la eficiencia se perderá.

Dejando esto de lado, no puede acceder a un índice de matriz más allá de su conteo actual. Como el conteo es 0 al principio, no puede acceder a ningún objeto. Es necesario agregar objetos antes de poder acceder a ellos.


-3 para la respuesta № 2

Has inicializado un array como:

NSMutableArray * myArray = [NSMutableArray arrayWithCapacity: 10];

esto significa que puede agregar hasta 10 objetos en la matriz. Y estás accediendo al sexto objeto de la matriz:

id myVariable = myArray[5];

No sé cómo estás agregando los objetos enla matriz, pero por el error parece que su matriz no tiene los objetos y está intentando acceder al sexto índice de la matriz vacía. Intenta añadir algunos objetos primero.