Le principal liées à la mémoire de problème, vous aurez toujours besoin d'être conscient de est de retenir les cycles. Cela se produit quand un objet a une forte pointeur à l'autre, mais l'objet cible a une forte pointeur vers l'original. Même lorsque toutes les autres références à ces objets sont retirés, ils ne seront toujours tenir l'un l'autre et ne sera pas publié. Cela peut également se produire indirectement, par une chaîne d'objets qui pourraient avoir le dernier de la chaîne de revenir à une version antérieure de l'objet.
C'est pour cette raison que l' __unsafe_unretained
et __weak
propriété qualificatifs existent. L'ancien ne permet pas de conserver n'importe quel objet de points, mais laisse ouverte la possibilité de l'objet en va et il pointant vers mauvais souvenir, alors que ce dernier ne conserve pas l'objet et se place automatiquement à zéro lorsque sa cible est libéré. Des deux, __weak
est généralement préféré sur les plates-formes d'appui.
Vous utiliserez ces qualificatifs pour des choses comme des délégués, où vous ne voulez pas l'objet à conserver son délégué et potentiellement conduire à un cycle.
Un autre couple d'importants liés à la mémoire préoccupations sont le traitement de Base des objets de la Fondation et de la mémoire allouée à l'aide d' malloc()
pour les types comme char*
. L'ARC ne peut pas gérer ces types, seul Objectif-C objets, de sorte que vous aurez toujours besoin de traiter avec vous-même. De base les types de base peut être particulièrement délicate, parce que parfois ils ont besoin d'être comblé à travers de correspondance Objective-C objets, et vice versa. Cela signifie que le contrôle doit être transféré en arrière et en avant de l'ARC lors de la transition entre le FC types et Objective-C. Certains mots clés liés à cette transition ont été ajoutées, et Mike Ash a une grande description de divers combler cas dans la longue durée de son ARC writeup.
En plus de cela, il ya plusieurs d'autres, moins nombreux, mais toujours potentiellement problématiques cas, les spécifications publiées va dans les détails.
Beaucoup de le nouveau comportement, basé sur le maintien des objets aussi longtemps que il ya une forte pointeur, est très similaire à la collecte des déchets sur le Mac. Cependant, les techniques de bases sont très différentes. Plutôt que d'avoir un garbage collector processus qui s'exécute à intervalles réguliers pour nettoyer des objets n'est plus d'être souligné, ce style de gestion de la mémoire repose sur l'rigide conserver / les règles de diffusion nous avons tous besoin d'obéir en Objective-C.
L'ARC prend simplement la répétition de la mémoire gestion des tâches, nous avons eu à faire pendant des années et décharge pour le compilateur, donc nous n'avons jamais à vous inquiéter de nouveau. De cette façon, vous n'avez pas l'arrêt de problèmes ou en dents de scie de la mémoire des profils expérimentés sur les ordures collectées plates-formes. J'ai connu les deux dans mes ordures collectées applications Mac, et je suis impatiente de voir comment ils se comportent en vertu de l'ARC.
Pour en savoir plus sur la collecte des ordures vs ARC, voir cette réaction très intéressante par Chris Lattner sur l'Objective-C liste de diffusion, où il énumère les nombreux avantages de l'ARC sur Objective-C 2.0 de collecte des ordures. J'ai couru dans plusieurs des GC questions qu'il décrit.