Ich habe mit der Entwicklung meiner ersten iOS-App mit Xcode 4.2 begonnen und zielte auf iOS 5.0 mit einer Vorlage für "Dienstprogrammanwendungen" ab (die mit einem FlipsideViewController geliefert wird).
Ich habe gelesen, dass ARC eine Funktion zur Kompilierungszeit ist und daher auch mit iOS 4 kompatibel sein sollte. Deshalb habe ich versucht, meine App auf 4.3 auszurichten und sie zu kompilieren. Wenn ich das tue, erhalte ich folgende Fehlermeldung:
FlipsideViewController.m: Fehler: Automatische Referenzzählung Problem: Das aktuelle Bereitstellungsziel unterstützt keine automatisierten __schwachen Referenzen
Es verweist auf diese Zeile:
@synthesize delegate = _delegate;
Diese Variable wird deklariert als:
@property (weak, nonatomic) IBOutlet id <FlipsideViewControllerDelegate> delegate;
Ich verstehe, dass "schwache Referenzen" in iOS 4 nicht unterstützt werden, aber ich verstehe nicht wirklich, warum ich zunächst eine schwache Referenz verwenden möchte, und ich kann auch nicht herausfinden, wie ich Dinge umschreiben würde, um sie nicht zu verwenden ARC immer noch nutzen (schließlich soll es mit iOS 4 UND 5 funktionieren, oder?)
quelle
unsafe_unretained
wird sowohl in iOS 4.x als auch in 5.0 unterstützt, sodass Sie abwärtskompatibel sind. Wenn Sie nur eine Version 5.0 erstellt haben, können Sie zu wechselnweak
, um die zusätzliche Sicherheit zu nutzen, die Sie erhalten.@autoreleasepool
(unter ARC, NSAutoreleasePool für ältere Implementierungen mit manuellem Referenzzähler).Wenn Sie nur schwache Referenzen für zusätzliche Sicherheit verwenden, rufen Sie die neuen Laufzeitfunktionen manuell auf, wenn sie verfügbar sind, und greifen Sie auf eine einfache Zuweisung von
__unsafe_unretained
Variablen zurück, wenn nicht.ZWRCompatibility.h wird dies etwas vereinfachen.
quelle
Dank der Kompatibilitätsbibliothek PLWeakCompatibilty von Mike Ash können Sie __weak jetzt auch unter iOS 4.x einfach verwenden.
Es ist unglaublich einfach zu konfigurieren und erfordert keine zusätzlichen Überlegungen oder Anstrengungen über 5.x.
quelle