Comme je le dis dans ma réponse ici, l'ARC peut fournir le meilleur des deux manuel de gestion de la mémoire et de traçabilité de la collecte des ordures. Il est principalement élimine le besoin d'un développeur pour suivre le manuel de conserve, les rejets, et autoreleases sur Objective-C objets, mais évite la nécessité d'un garbage collector processus qui peut utiliser des ressources limitées sur un appareil mobile et de causer des bégaie dans une application en cours d'exécution.
ARC insère le approprié conserve et restitue requis pour le comptage de référence au moment de la compilation, en appliquant les règles que tous Objective-C, les développeurs ont eu à utiliser au fil des ans. Ceci libère le développeur d'avoir à gérer eux-mêmes. Parce que la conserve et la libération sont insérés au moment de la compilation, pas de collector processus est nécessaire à la permanence de balayage de la mémoire et de supprimer les objets non référencés.
Un léger avantage que le suivi de collecte des ordures a plus l'ARC est que l'ARC ne traitera pas avec les conserver cycles pour vous, où le suivi de collecte des ordures peut aller les chercher.
Une lecture intéressante sur le sujet vient de ce fil de discussion sur Apple Objective-C liste de diffusion, où Chris Lattner a ceci à dire:
Le principal avantage de l'GC-dessus de l'ARC, c'est qu'il recueille conserver
les cycles. Un avantage secondaire est que les "non" missions sont
"atomique", parce qu'ils sont un simple magasin. L'ARC a plusieurs grandes
avantages par rapport à libauto GC:
- Il a déterministe de la remise en état des objets (lorsque la dernière référence forte à l'objet disparaît) où GC libère un objet "parfois
plus tard". Ceci définit l'écart d'une classe de bogues subtils qui peuvent exister dans le GC
les applications qui ne sont pas exposés parce que le collecteur n'a pas de déclenchement "dans le
buggy fenêtre".
- La ligne des hautes eaux est généralement beaucoup plus faible avec l'ARC de GC, car les objets sont libérés plus tôt.
- libauto fournit un fragile modèle de programmation, vous devez être prudent afin de ne pas perdre écrire des obstacles etc.
- pas tous les cadres du système des GC sont propres, et les cadres à l'occasion de la régression à mesure qu'ils évoluent.
- L'ARC ne souffre pas de fausses racines. libauto de façon conservatrice des scans de la pile, ce qui signifie que les entiers qui ressemblent à des pointeurs de racine
les graphes d'objets.
- L'ARC n'a rien que de coups de pied dans les arrêts de votre application, causant de l'INTERFACE utilisateur bégaie. libauto est assez avancé aussi loin que GC implémentations
parce qu'elle n'est pas immédiatement s'arrêter à chaque thread, mais cela ne fonctionne toujours
finissent généralement l'arrêt de tous les threads l'INTERFACE utilisateur.
Je suis actuellement en train de migrer mes deux manuelle de la mémoire gestion de projets, ainsi que ceux en Objective-C la collecte des ordures, à l'ARC. Après l'utilisation de la collecte des ordures dans un couple des applications Mac pour un certain temps maintenant, je vois des avantages considérables pour le transfert de ces projets à l'ARC.