Quels sont les avantages et les inconvénients de l'utilisation de la nouvelle automatique de comptage de référence (ARC) gestion de la mémoire de style dans un projet iOS?
Un ARC déroulement du programme est presque identique à bien écrit MRC. Qui est, les différences de comportement sont souvent indétectables, car à la fois l'ordre des opérations et les performances sont très proches.
Si vous savez déjà comment implémenter OS X ou iOS apps avec manuel de comptage de référence (MRC), l'ARC n'a pas vraiment d'ajouter des fonctionnalités -- il permet simplement de supprimer le comptage de référence des opérations à partir de vos sources.
Si vous ne voulez pas apprendre MRC, alors vous pouvez essayer d'abord de l'ARC. Beaucoup de gens luttent avec, ou essayer d'ignorer les pratiques courantes de la MRC (exemple: j'ai introduit un certain nombre de objc devs à l'analyseur statique). Si vous voulez éviter ces problèmes, l'ARC vous permettra de retarder votre compréhension; vous ne pouvez pas écrire non trivial objc programmes sans la compréhension de comptage de référence et objet de la durée de vie et les relations, que ce soit de la MRC, à l'ARC, ou GC. ARC et GC simplement supprimer la mise en œuvre de vos sources et de faire la bonne chose dans la plupart des cas. Avec ARC et GC, vous aurez toujours besoin de donner quelques conseils.
Je n'ai pas mesuré, mais il peut être utile de mentionner que la compilation d' ARC sources prendrait plus de temps et de ressources.
Si le programme que vous êtes en développement a plutôt fait perdre l'usage de comptage de référence (par exemple, typique d'un montant de autoreleases), le passage à l'ARC pourrait vraiment améliorer votre programme de temps d'exécution et à l'utilisation maximale de la mémoire.
Vous pouvez choisir de ne pas utiliser de l'ARC lors de l'élaboration de la version 5.0 d'iOS SDK?
Oui, à l'aide de CLANG_ENABLE_OBJC_ARC. L'ARC est compatible binaire, et tout ce qui se passe réellement est que le compilateur fait de son mieux pour introduire la appropriée de comptage de référence des opérations automatiquement, basée sur les déclarations visible à la traduction en cours (voir ma réponse ici, pourquoi la traduction, la visibilité est importante). Par conséquent, vous pouvez également activer et de la désactiver pour certaines sources dans un projet et de permettre à d'autres personnes.
Le mode mixte (certaines MRC et certaines ARC sources) est cependant assez compliqué, et subtilement, notamment par rapport aux implémentations qui peuvent être reproduites par le compilateur (par exemple, une fonction inline du corps peut être incorrecte). Un tel mode mixte questions seront très difficiles à isoler. ObjC++ programmes et des sources sera particulièrement difficile à cet égard. En outre, le comportement peut varier en fonction de l'optimisation des paramètres (comme, par exemple); un programme qui fonctionne parfaitement dans une version de débogage peut présenter une fuite ou d'un zombie dans le communiqué.
Recommandez-vous à l'ARC ou le manuel de référence de comptage (MRC) pour un nouveau projet?
Personnellement, je vais rester avec la MRC pour un certain temps. Même si l'ARC a été testé dans l'utilisation du monde réel, il est probable qu'il existe un certain nombre de questions restant qui apparaîtront dans des scénarios complexes, ce qui vous évitera d'être le premier à le savoir et à déboguer. OS X Collecte des Ordures est un exemple des raisons pour lesquelles vous voudrez peut-être attendre. À titre d'exemple, le commutateur peut altérer lorsque les objets sont détruits-vos objets peuvent être détruits au plus tôt et de ne jamais être placés dans autorelease piscines. Il peut également modifier l'ordre dans lequel ivars sont libérés, ce qui pourrait avoir certains effets secondaires.
J'ai aussi une grande base de code que je ne veux pas perdre une semaine de test de cette fonctionnalité, car à cette époque. Enfin, la compatibilité ascendante est toujours important pour moi.
Une application à l'aide de l'ARC-être en mesure de fonctionner sur d'anciennes versions du système d'exploitation de la version 5.0 d'iOS?
Si vous développez avec les MRC, il sera rétro-compatible. Si vous développer à l'ARC, il ne sera pas forcément compatible. En fait, il peut même ne pas compiler sans un peu de travail supplémentaire. Les exigences pour le moteur d'exécution sont disponibles dans certaines versions antérieures. Voir également cette question. Si vous avez besoin d'une compatibilité ascendante, ARC ne va pas être une option pour certaines versions de système d'exploitation.
Enfin, si vous étiez à limiter le choix de GC ou d'un ARC, je vous recommande d'ARC.