2011-02-23 8 views
6

Aquí hay dos métodos en un controlador de vista de un tutorial de Apple:¿Por qué liberar una propiedad que ya ha configurado como nula?

- (void)viewDidUnload { 
    self.eventsArray = nil; 
    self.locationManager = nil; 
    self.addButton = nil; 
} 

- (void)dealloc { 
    [managedObjectContext release]; 
    [eventsArray release]; 
    [locationManager release]; 
    [addButton release]; 
    [super dealloc]; 
} 

No se pudo el método dealloc acortarse a la siguiente? ¿Si no, porque no?

- (void)dealloc { 
    [managedObjectContext release]; 
    [super dealloc]; 
} 

Respuesta

5

- (void)viewDidUnload no se garantiza que se llame, por lo que siempre debe liberar las cosas en dealloc también.

Consulte this question para averiguar cuándo se llama y qué debe hacer cuando lo haga.

3

No, porque no se puede confiar en viewDidUnload siendo llamados cancelación de asignación. viewDidUnload solo se invoca cuando el controlador de vista recibe una advertencia de memoria mientras su vista no está en pantalla. Si el controlador de vista se desasigna, no se llama al viewDidUnload (AFAIK, no estoy del todo seguro).

1

porque es una buena práctica limpiar siempre tus ivars en dealloc. algo podría salir mal, o puede encontrarse con una ejecución que no espera.

-1

Configuración eventsArray-nil simplemente significa que no tiene contenido, pero aún espacio para contenido Calling [eventsArray release] abre el espacio de la matriz consume.

+2

No realmente. Si 'eventsArray' es una propiedad de retención o copia, establecerlo en' nil' libera efectivamente el objeto de respaldo (si lo hay). –

Cuestiones relacionadas