J'ai commencé à développer ma première application iOS avec Xcode 4.2 et ciblais iOS 5.0 avec un modèle "d'application utilitaire" (celui qui est fourni avec un FlipsideViewController).
J'ai lu que, puisque ARC est une fonctionnalité de compilation, il devrait également être compatible avec iOS 4, j'ai donc tenté de cibler mon application sur 4.3 et d'essayer de la compiler. Lorsque je le fais, j'obtiens cette erreur:
FlipsideViewController.m: erreur: comptage automatique des références Problème: la cible de déploiement actuelle ne prend pas en charge les références __weak automatisées
Il fait référence à cette ligne:
@synthesize delegate = _delegate;
Cette variable est déclarée comme:
@property (weak, nonatomic) IBOutlet id <FlipsideViewControllerDelegate> delegate;
Je comprends que les «références faibles» ne sont pas prises en charge dans iOS 4, mais je ne comprends pas vraiment pourquoi je voudrais utiliser une référence faible pour commencer, et je ne peux pas non plus comprendre comment réécrire les choses pour éviter de l'utiliser, alors que profitant toujours d'ARC (après tout, il est censé fonctionner avec iOS 4 ET 5, n'est-ce pas?)
la source
unsafe_unretained
est pris en charge dans iOS 4.x et 5.0, il vous offre donc une compatibilité ascendante. Si vous faisiez une version 5.0 uniquement, vous pouvez passer àweak
pour profiter de la sécurité supplémentaire qu'elle vous offre.@autoreleasepool
(sous ARC, NSAutoreleasePool pour les implémentations plus anciennes comptées manuellement).Si vous n'utilisez que des références faibles pour plus de sécurité, appelez manuellement les nouvelles fonctions d'exécution si elles sont disponibles et revenez à l'affectation simple sur les
__unsafe_unretained
variables si ce n'est pas le cas.ZWRCompatibility.h simplifiera quelque peu cela.
la source
Grâce à la bibliothèque de compatibilité PLWeakCompatibilty de Mike Ash , vous pouvez maintenant simplement utiliser __weak sur iOS 4.x, ainsi.
Il est incroyablement facile à configurer et ne nécessite aucune considération ou effort supplémentaire par rapport à 5.x.
la source