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. Anular Ext.data.Connection - Best Practice
- 2. Spring Webflow Best Practice
- 3. UISegmentedControl Best Practice
- 4. Best practice Error handling
- 5. MVC ViewBag Best Practice
- 6. Sql naming best practice
- 7. Hibernate Performance Best Practice?
- 8. C++ namespace best practice dilemma
- 9. Cocoa Callback Design: Best Practice
- 10. Android Package Structure Best Practice
- 11. Best Practice WPF Prism Resources
- 12. API Wrapper Architecture Best Practice
- 13. Sencha Touch unit testing best practice?
- 14. ASP.Net MVC Try Catch Best Practice
- 15. Django ajax error response best practice
- 16. Verilog Best Practice - Incrementando una variable
- 17. Scala string pattern matching best practice
- 18. Android "Best Practice" uso de Intents
- 19. Hg post-merge commit message, best practice?
- 20. clase de Java "User" naming best practice?
- 21. Best Practice LongRunning Creación de tareas
- 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