Me preguntaba cuándo eliminar un objeto utilizando removeObject en una matriz si ese objeto eliminado se maneja correctamente. ¿Se lanzaría el objeto que se está eliminando?¿removeObject libera el objeto en un NSMutableArray de objetos?
Respuesta
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];
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).
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.
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];
- 1. En los métodos NSMutableArray, RemoveObject: vs removeObjectIdenticalTo:
- 2. obtener objetos en NSMutableArray
- 3. System.Runtime.Caching no libera BitmapImage objetos
- 4. NSMutableArray insertar objeto en el índice
- 5. ¿Cómo invierto el orden de los objetos en un NSMutableArray?
- 6. Adición de objetos a un NSMutableArray propiedad
- 7. ¿Cómo eliminar solo una instancia de un objeto de un NSMutableArray?
- 8. NSMutableArray compruebe si el objeto ya existe
- 9. Tamaño total del objeto NSMutableArray
- 10. Guardar/Escribir NSMutableArray de los objetos en el disco?
- 11. ¿Cómo saber si un objeto se libera automáticamente o no?
- 12. Extracción de objeto desde NSMutableArray
- 13. Cómo reemplazar un objeto en un NSMutableArray en un índice dado con un nuevo objeto
- 14. ¿Agregar objetos de cadena a NSMutableArray?
- 15. cómo agregar un objeto a NSMutableArray
- 16. ¿Puedo poner diferentes tipos de objetos en el mismo NSMutableArray?
- 17. Windows 7 Gadget no libera el objeto ActiveX
- 18. Ordenar NSMutableArray Por propiedad del objeto
- 19. Cómo ordenar un NSMutableArray de Objetos gestionados a través de un gráfico de objetos
- 20. Agregar un objeto a un índice específico de un NSMutableArray
- 21. Adición de objeto de C++ en el NSMutableArray
- 22. añadiendo objeto NSInteger a NSMutableArray
- 23. cómo borrar un NSMutableArray de objetos personalizados sin crear pérdidas de memoria?
- 24. ¿Agregar un objeto al principio de un NSMutableArray?
- 25. ¿Cómo puedo verificar si existe un objeto en un determinado índice de un NSMutableArray?
- 26. ¿Cómo eliminar todos los objetos de un NSMutableArray?
- 27. objetivo-c: cómo actualizar el objeto en NSMutableArray?
- 28. NSMutableArray removeObjectAtIndex
- 29. Guardar NSMutableArray en el disco
- 30. NSMutableArray: ¿es más rápido eliminar todos los objetos o iniciar un nuevo NSMutableArray?
Si tenemos el objeto directamente sin el índice, podría aplicarse esto así? [[anObject retain] liberación automática]; [arrayOfObjects removeObject: anObject]; – Frank
@Frank: Sí, lo haría. –