2011-02-23 7 views
6

Qui ci sono due metodi in un controller della vista da un tutorial di Apple:Perché rilasciare una proprietà che hai già impostato su zero?

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

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

Impossibile il metodo dealloc essere ridotto a quanto segue? Se no, perché no?

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

risposta

5

- (void)viewDidUnload non è garantito per essere chiamato, quindi è sempre necessario rilasciare le cose in dealloc anche.

Vedere this question per sapere quando viene chiamato e cosa si dovrebbe fare quando lo è.

3

No, perché non si può fare affidamento su viewDidUnload essere chiamati deallocazione. viewDidUnload viene chiamato solo quando il controller della vista riceve un avviso di memoria mentre la sua vista non è sullo schermo. Se il controller della vista viene deallocato, non viene chiamato viewDidUnload (AFAIK, non ne sono completamente sicuro).

1

perché è una buona pratica ripulire sempre i tuoi ivars in dealloc. qualcosa potrebbe andare storto, o potresti incontrare un'esecuzione che non ti aspetti.

-1

Impostazione eventsArray-nil significa solo che non ha alcun contenuto, ma ancora spazio per i contenuti Calling [eventsArray release] rilascia lo spazio della matrice consumato.

+2

Non proprio. Se 'eventsArray' è una proprietà di ritenzione o copia, impostandola su' nil' rilascia in modo efficace l'oggetto di supporto (se presente). –

Problemi correlati