2011-10-14 7 views
12

Oceniam przejście na ARC (automatyczne liczenie odwołań) i refaktoryzację do zastosowania do mojego kodu. Wśród rzeczy muszę się dowiedzieć, że jest to:UIViewController didReceiveMemoryWarning w środowisku ARC

co należy zrobić w didReceiveMemoryWarning jeśli wyraźne zwolnienie obiektów nie jest dozwolone przez ARC? Obecnie używam tej metody do uwolnienia obiekty należące do mojego kontrolera i są łatwo odzyskiwane poprzez leniwych pobierające:

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

i względną leniwe Getter:

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

wydaje się niemożliwe do realizacji takich " wzór "w ARC ... więc, co powinienem zrobić? Czy didReceiveMemoryWarning należy uznać za "przestarzałe"/bezużyteczne w ARC?

Odpowiedz

20

ARC obsługuje kod zatrzymania i zwolnienia, więc ustawienie _foo na zero jest wystarczające, aby zezwolić na wygenerowanie kodu wygenerowanego przez ARC. Nie wydaje się jawnie, po prostu zarządza się wykresem obiektu, a kod wygenerowany przez ARC przeprowadzi jego wydanie, gdy będzie to właściwe.

Przeczytaj dokument Apple Transitioning To ARC Release Notes, aby uzyskać więcej informacji.

0

Możesz zrobić kilka rzeczy, ale wszystkie są specyficzne dla aplikacji. Rzeczy takie jak czyszczenie tablic i słowników oraz ustawianie odniesień do obiektu na zero (sposób usuwania obiektów ARC).