Cuando asignamos memoria a una variable de clase, ¿debemos liberarla o establecerla en nil en el método dealloc? cual es la mejor practica?versión Vs nil - Best Practice
Respuesta
La mejor opción:
[foo release]; // ensures that memory is released
foo = nil; // ensures that there is no dangling pointer to released memory
Otras notas:
Cuando se asigna a una propiedad declarada para retener,
// in your .h
@property (retain) MyObject *foo;
// in your .m
self.foo = bar; // bar is retained; whatever foo previously pointed at is released
se dará a conocer lo que apuntaba anteriormente at y retener el nuevo objeto asignado.
Por lo tanto, se puede utilizar:
self.foo = nil;
y se dará a conocer lo foo estaba señalando. Sin embargo, si su propiedad no fue declarada para conservar la semántica de almacenamiento, esto no liberará implícitamente lo que foo señale. Además, como señaló Ryan, una propiedad puede ser anulada para tener efectos secundarios. Por esta razón, lo mejor es seguir el patrón de siempre usando:
[foo release];
Para asegurarse de que no tiene una referencia colgante de memoria liberada, puede seguir esto con:
foo = nil;
Si no está utilizando propiedades con conservar la semántica, que necesidad para liberar todo lo que se almacena en la variable:
[foo release];
EDIT: Véase también la siguiente respuesta a otra pregunta que explica esto:
Es más seguro usar siempre: liberar en lugar de establecer la propiedad, ya que se pueden anular los establecedores para que tengan efectos secundarios. No quieres que ocurran efectos secundarios en tu método dealloc. – Ryan
Gracias Ryan - Edité mi respuesta para reflejar esto. – Greg
Excelente. ¡¡¡Gracias Señor!!! – Abhinav
- 1. MVC ViewBag Best Practice
- 2. Spring Webflow Best Practice
- 3. Sql naming best practice
- 4. Anular Ext.data.Connection - Best Practice
- 5. Hibernate Performance Best Practice?
- 6. UISegmentedControl Best Practice
- 7. Best practice Error handling
- 8. Android Package Structure Best Practice
- 9. C++ namespace best practice dilemma
- 10. Best Practice WPF Prism Resources
- 11. API Wrapper Architecture Best Practice
- 12. Cocoa Callback Design: Best Practice
- 13. Android "Best Practice" uso de Intents
- 14. Django ajax error response best practice
- 15. Hg post-merge commit message, best practice?
- 16. Scala string pattern matching best practice
- 17. Sencha Touch unit testing best practice?
- 18. Best Practice LongRunning Creación de tareas
- 19. clase de Java "User" naming best practice?
- 20. ASP.Net MVC Try Catch Best Practice
- 21. Verilog Best Practice - Incrementando una variable
- 22. Subversion Branch/Trunk Best Practice: ¿mantener actualizada la sucursal?
- 23. JSF CDI: Conversation scope bean [s] best practice
- 24. iPhone: diferencia entre nil vs Nil y verdadero vs TRUE
- 25. Clojure nil vs Java null?
- 26. Android Best Practice on Actualización de la interfaz de usuario de BroadcastReceiver a una determinada actividad
- 27. javascript best practice define variable (espacio de nombres) check no está ya definido
- 28. NULL vs nil en Objective-C
- 29. Error NSError *; vs NSError * error = nil;
- 30. Versión del archivo vs. Versión del producto
puede aclarar lo que entendemos por "variable de clase"? – ohhorob