55 votes

Quelle est la différence entre le comptage automatique de références Objective-C et le ramassage des ordures?

Avec le nouveau comptage automatique de références (ARC) introduit dans Xcode 4.2, nous n'avons plus besoin de gérer manuellement la conservation / la libération dans Objective-C.

Cela semble similaire à la récupération de place, comme dans Objective-C sur Mac et dans d'autres langues. En quoi ARC diffère-t-il de la récupération de place?

65voto

Brad Larson Points 122629

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:

  1. 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".
  2. 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.
  3. libauto fournit un fragile modèle de programmation, vous devez être prudent afin de ne pas perdre écrire des obstacles etc.
  4. pas tous les cadres du système des GC sont propres, et les cadres à l'occasion de la régression à mesure qu'ils évoluent.
  5. 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.
  6. 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.

8voto

Jon Harrop Points 26951

Comment ARC diffèrent de la collecte des ordures?

L'ARC est une forme de collecte des ordures.

Tu veux sans doute dire "quelle est la différence entre l'ARC et de traçabilité de la collecte des ordures (comme la JVM et .NET)?". Les principales différences sont que l'ARC est plus lente et les fuites de cycles. C'est pourquoi la JVM et .NET à la fois utiliser le suivi ramasseurs d'ordures. Pour plus d'informations, veuillez lire Comment faire de comptage de référence et de suivi de collecte des ordures comparer?.

-7voto

objectivecdeveloper Points 1216

la réponse courte et douce est la suivante:

GC de java est Runtime, alors qu'ARC est le moment de la compilation.

Le catalogue global fait référence aux objets au moment de l'exécution et recherche les dépendances de l'exécution de l'objet. Pendant qu'ARC ajoute la version, conserve, libère automatiquement les appels à compiletime.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X