2009-04-07 16 views
7

Creo que sé la diferencia, pero no sé cómo explicarlo correctamente.¿Qué explica mejor la diferencia entre [myVar dealloc] y [myVar release]?

dealloc elimina la memoria reservada por esa variable total e inmediatamente.

release disminuye el contador de retención de la memoria de esa variable en -1. si fuera 1, entonces es 0, por lo que tendría el mismo efecto que dealloc en ese momento.

¿es así? o hay una mejor explicación corta?

Respuesta

13

Eso es exactamente.

Pero no usaría dealloc, cuando usa un objeto, porque no sabe cuál es el conteo retenido. Tampoco te importa Simplemente diga que ya no lo necesita, llamando al release. Y una vez que nadie lo haga, el objeto llamará al dealloc en sí mismo.

7

Todo correcto, pero el punto clave que se está perdiendo es que nunca debe llamar a dealloc usted mismo. Aquí hay alguna información de la documentación de Apple en el método de dealloc NSObject:

(de http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/nsobject_Class/Reference/Reference.html#//apple_ref/occ/instm/NSObject/dealloc)

Nunca enviar un mensaje dealloc directamente. En su lugar, el método dealloc de un objeto se invoca indirectamente a través de el método de protocolo de liberación NSObject (si el mensaje de liberación da como resultado el recuento de retención del receptor que se convierte en 0). Consulte la Programación de administración de memoria Guía de Cocoa para obtener más información sobre el uso de estos métodos.

subclases debe aplicar sus propios versiones de dealloc para permitir la liberación de cualquier memoria adicional consumida por el objeto, tales como almacenamiento asignado dinámicamente para datos u objeto variables de instancia propiedad de el objeto desasignado. Después de la realización de la desasignación específico de clase, el método subclase debe incorporar versiones superclase de dealloc a través de un mensaje a súper:

+0

gracias. Creo que estoy un poco confundido ahora ... así que dentro de los métodos dealloc de subclases, tengo que dealloc mis variables de instancia, ¿verdad? es decir - (void) dealloc { \t [yellowViewController dealloc]; \t [blueViewController dealloc]; [super dealloc]; } – Thanks

+0

Para que quede claro, nunca llame a dealloc en nada excepto súper. La implementación correcta del método Thanksloc dealloc es: - (void) dealloc {[versión de YellowViewController]; [versión de blueViewController]; [super dealloc]; } – rpetrich

+0

Veo que está leyendo Beginning iPhone 3 Development - Explorando el SDK (Yo también, reconocí el proyecto de controlador de vista amarillo/azul). – mk12

Cuestiones relacionadas