Mi clase tiene un NSArray que está lleno de objetos. En mi método dealloc, ¿puedo simplemente invocar la versión en mi NSArray, o necesito iterar la matriz y liberar todos los objetos primero?Con un NSArray de referencias a objetos, ¿libero explícitamente todos los objetos en la matriz o solo la matriz misma?
Respuesta
Puede llamar la versión directamente en el NSArray
. La implementación de NSArray
se encargará de enviar release
a todos los objetos almacenados en la matriz.
Debería poder lanzar el NSArray y lanzará todos sus objetos, independientemente de si tiene otras referencias a ellos. Si tiene un objeto de instancia que también existe en NSArray, tendrá que liberar ese objeto explícitamente; simplemente liberarlo puede no desasignar el objeto fuera del contexto de la matriz.
NSArray conserva los objetos cuando se agregan y los libera cuando se eliminan o la matriz se desasigna. Tenga esto en cuenta, es este concepto de "propiedad" el que retiene/libera la gestión de la memoria. Es lo mismo con el objeto que posee la matriz, si también retuvo los objetos en la matriz, tendrá que enviarles otro mensaje de lanzamiento en su implementación dealloc. De lo contrario, y si no hay otros objetos que los retengan, serán desasignados una vez que la matriz los libere.
¡Gracias, su primera frase me salvó el día! –
- 1. Encontrar la mayoría de los objetos repetidos en la matriz
- 2. Ordenar NSArray con la costumbre objetos
- 3. extrayendo propiedades de NSArray de los objetos
- 4. agregar elementos a la matriz de objetos
- 5. ¿NSArray copia objetos?
- 6. objetos Restar en uno NSArray de otra matriz
- 7. Buscando NSArray de objetos NSDictionary
- 8. Convertir matriz plana de objetos en matriz anidada de objetos
- 9. matriz de objetos con numpy
- 10. Matriz de NSManagedObjectIDs, obtener los objetos a la vez
- 11. Vectores de referencias a objetos
- 12. NSArray de objetos y Casting
- 13. Perl - Matriz de objetos
- 14. activerecord matriz de objetos a coma cadena
- 15. Agregar objetos adicionales a la matriz con codificación JSON
- 16. NSArray lleno de objetos bool
- 17. Agregar objetos a una matriz de objetos en Powershell
- 18. matriz de objetos estáticos
- 19. C colección # basura con referencias a objetos
- 20. PHP: defina la matriz estática de objetos
- 21. MongoDB: ordena la matriz anidada de objetos
- 22. Hash edificio mediante la agrupación de matriz de objetos basado en una propiedad de los objetos
- 23. serialización JSON de matriz con objetos polimórficos
- 24. matriz intersecar para la matriz de objetos php
- 25. ¿Tipos anónimos a una matriz de objetos?
- 26. inicializar una matriz de objetos
- 27. ¿Por qué todos los demás objetos de mi matriz están en blanco?
- 28. delete [] una matriz de objetos
- 29. in_array en objetos con referencias circulares
- 30. Ordenando una matriz de objetos en Chrome
Debería agregar: si tiene un conteo retenido en uno de los objetos contenidos, entonces debe liberar automáticamente * antes de * agregarlo a la matriz. –
Estoy confundido. ¿Por qué debo autorrelease * antes * de agregarlo a una matriz? ¿No puedo, por ejemplo, hacer explícitamente una 'versión' después de agregarla a la matriz? p. [arrayObject addObject: myObject]; [liberación de myObject]; –
@ Heng-Cheong Leong sí, eso también es aceptable. El punto es no arriesgarse a que su objeto sea desasignado antes de que sea retenido por la matriz. –