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 № 1Utilizando 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.