2013-05-03 18 views
9

Próbuję stworzyć jakiś kod porządki w mojej klasie Objective-C, poprzez zastępowanie dealloc:Objective-C destructor z ARC

-(void)dealloc { 
    //cleanup code 
    [super dealloc]; 
} 

Chociaż nie mogę tego zrobić, ponieważ [super dealloc] jest niedozwolone przez kompilator podczas ARC jest włączony. Czy istnieje alternatywa, z której mogę skorzystać?

Odpowiedz

22

Z Transitioning to ARC Release Notes kopalni (nacisk):

można zaimplementować metodę dealloc jeśli trzeba zarządzać zasobami innych niż zwalnianie zmiennych instancji. Nie musisz (w rzeczy samej nie możesz) wydobywać zmiennych instancji, ale być może będziesz musiał wywołać [systemClassInstance setDelegate: nil] na klasach systemowych i innym kodzie, który nie jest skompilowany za pomocą ARC.

Niestandardowe metody dealloc w ARC nie wymagają wywołania [super dealera] (w rzeczywistości powoduje to błąd kompilatora). Łańcuch do super jest zautomatyzowany i wymuszany przez kompilator.

Więc można zrobić tego samego rodzaju porządki w dealloc podczas korzystania z ARC, po prostu nie zadzwonić super.

5

Gdy ARC jest aktywny, po prostu nie dzwoń pod numer [super dealloc]. ARC zrobi to za Ciebie. Alternatywnie, możesz mieć metodę prepareForDealloc, która pozwala na wywołanie super i która jest wywoływana z poziomu dealloc w twojej klasie bazowej.