2009-11-03 15 views

Respuesta

14

NSMutableArray lo lanzará. Si ese es el último retener en él, será desasignado. De la documentación:

Al igual que NSArray, las instancias de NSMutableArray mantienen fuertes referencias a sus contenidos. Si no utiliza la recolección de basura [Jed: el iPhone no], cuando agrega un objeto a una matriz, el objeto recibe un mensaje de retención. Cuando se elimina un objeto de una matriz mutable, recibe un mensaje de liberación. Si no hay más referencias al objeto, esto significa que el objeto está desasignado. Si su programa mantiene una referencia a dicho objeto, la referencia se volverá inválida a menos que envíe al objeto un mensaje de retención antes de que se elimine de la matriz.

Ver el NSMutableArray documentation. Su ejemplo, de hecho, se refiere a removeObjectAtIndex::

id anObject = [[anArray objectAtIndex:0] retain]; 
[anArray removeObjectAtIndex:0]; 
[anObject someMessage]; 
+0

Si tenemos el objeto directamente sin el índice, podría aplicarse esto así? [[anObject retain] liberación automática]; [arrayOfObjects removeObject: anObject]; – Frank

+0

@Frank: Sí, lo haría. –

3

Sí, cuando el objeto se elimina de NSMutableArray, se libera. Si su recuento retenido es 0, será desasignado (o basura recolectada, si en su lugar se ejecutara en OS X con GC habilitado).

5

Sí. Las colecciones conservan los valores que recopilan cuando los valores se agregan a la colección, lo que significa que los valores se liberan cuando se eliminan de la colección.

0

Como todo el mundo ha dicho, el objeto de un NSMutableArray se libera después de que se retira de la matriz.

Si no desea liberar el objeto, consérvelo justo antes de llamar al método remove object. En este caso, usted es responsable de ella para liberarla más tarde:

MyClass *objectToBeRemoved=[myArray objectAtIndex:indexPath.row]; 
[objectToBeRemoved retain]; 
[myArray removeObject:objectToBeRemoved]; 
Cuestiones relacionadas