Zacząłem opracowywać moją pierwszą aplikację na iOS z Xcode 4.2 i celowałem w iOS 5.0 z szablonem „aplikacji narzędziowej” (tym, który jest dostarczany z FlipsideViewController).
Czytałem, że ponieważ ARC jest funkcją czasu kompilacji, powinien być również kompatybilny z iOS 4, więc próbowałem skierować moją aplikację na 4.3 i spróbować ją skompilować. Kiedy to robię, pojawia się ten błąd:
FlipsideViewController.m: błąd: Automatyczne liczenie odwołań Problem: bieżący cel wdrożenia nie obsługuje automatycznych __ słabych odwołań
Odnosi się do tej linii:
@synthesize delegate = _delegate;
Ta zmienna jest zadeklarowana jako:
@property (weak, nonatomic) IBOutlet id <FlipsideViewControllerDelegate> delegate;
Rozumiem, że „słabe odwołania” nie są obsługiwane w iOS 4, ale nie bardzo rozumiem, dlaczego miałbym chcieć używać słabego odwołania na początku, ani nie mogę dowiedzieć się, jak przepisać rzeczy, aby uniknąć ich używania, podczas gdy nadal korzysta z ARC (w końcu ma działać z iOS 4 AND 5, prawda?)
źródło
unsafe_unretained
jest obsługiwany zarówno w iOS 4.x, jak i 5.0, dzięki czemu zapewnia kompatybilność wsteczną. Jeśli tworzysz tylko wersję 5.0, możesz przełączyć się na,weak
aby skorzystać z dodatkowego bezpieczeństwa, które zapewnia.@autoreleasepool
(w ARC, NSAutoreleasePool dla starszych implementacji z liczonymi ręcznie odwołaniami).Jeśli używasz tylko słabych odwołań dla dodatkowego bezpieczeństwa, ręcznie wywołaj nowe funkcje środowiska uruchomieniowego, jeśli są dostępne, a jeśli nie, powróć do prostego przypisania
__unsafe_unretained
zmiennych.ZWRCompatibility.h nieco to uprości.
źródło
Dzięki bibliotece kompatybilności PLWeakCompatibilty Mike'a Asha , możesz teraz po prostu używać __weak również na iOS 4.x.
Jest niezwykle łatwy w konfiguracji i nie wymaga dodatkowego namysłu ani wysiłku w porównaniu z wersją 5.x.
źródło