2011-10-14 14 views
12

Sto valutando il passaggio a ARC (conteggio automatico dei riferimenti) e il refactoring da applicare al mio codice. Tra le cose che devo capire, c'è questo:UIViewController's madeReceiveMemoryWarning in ambiente ARC

cosa devo fare in didReceiveMemoryWarning se il rilascio esplicito degli oggetti non è consentito dalla ARC? Attualmente, utilizzare tale metodo per rilasciare oggetti appartenenti al mio controller e che sono facilmente recuperabili tramite getter pigri:

- (void)didReceiveMemoryWarning { 
    [_foo release]; _foo = nil; 
    [super didReceiveMemoryWarning]; 
} 

e il relativo getter artificiale:

- (Foo *)foo { 
    if (_foo) { 
     return _foo; 
    } 
    return (_foo = [[Foo alloc] init]); 
} 

Sembra impossibile attuare tale " pattern "in ARC ... quindi, cosa dovrei fare? DovrebbeReceiveMemoryWarning essere considerato "deprecato"/inutile in ARC?

risposta

20

ARC gestisce il codice di ritenzione e rilascio, pertanto l'impostazione di _foo su zero è sufficiente per consentire al codice generato da ARC di eseguire il rilascio. Non rilasci esplicitamente, semplicemente gestisci il tuo oggetto grafico e il codice generato da ARC eseguirà il rilascio quando appropriato.

Leggere il documento Apple Transitioning To ARC Release Notes per ulteriori informazioni.

0

È possibile eseguire diverse operazioni, ma tutte sono specifiche dell'applicazione. Cose come cancellare array e dizionari e impostare riferimenti a oggetti a zero (il modo in cui ARC elimina gli oggetti).