Próbuję nauczyć się automatycznego liczenia referencji w iOS 5. Teraz pierwsza część tego pytania powinna być łatwa:
Czy to prawda, że NIE muszę pisać jawnych instrukcji release-property w moim dealloc, gdy używam ARC? Innymi słowy, czy to prawda, że poniższe elementy NIE wymagają wyraźnego cofnięcia przydziału?
@interface MyClass : NSObject @property (strong, nonatomic) NSObject* myProperty; @end @implementation MyClass @synthesize myProperty; @end
Moje następne i ważniejsze pytanie pochodzi z wiersza w dokumencie Przejście na wersję ARC :
Nie musisz (a nawet nie możesz) zwolnić zmiennych instancji, ale może być konieczne wywołanie funkcji [self setDelegate: nil] na klasach systemowych i innym kodzie, który nie jest kompilowany przy użyciu ARC.
To nasuwa pytanie: skąd mam wiedzieć, które klasy systemowe nie są kompilowane z ARC? Kiedy powinienem tworzyć własne dealloc i jawnie ustawiać silnie zachowujące właściwości na zero? Czy powinienem założyć, że wszystkie klasy ram NS i UI używane we właściwościach wymagają jawnych deallocs?
Istnieje wiele informacji na temat SO i nie tylko na temat praktyk zwalniania zabezpieczającego ivar nieruchomości podczas korzystania z ręcznego śledzenia odniesień, ale stosunkowo niewiele na ten temat w przypadku korzystania z ARC.
MyController : UIViewController
klasę, która tworzy i jest właścicielem UIView, a także ustawia delegata widoku na siebie. To jedyny zachowany właściciel tego poglądu. Kiedy kontroler zostanie zwolniony, widok powinien również zostać zwolniony. Czy w takim razie ma znaczenie, czy wskaźnik delegata zwisa?