====== Comptage des références ====== //ARC ou ne pas ARC ! Telle est la question// ===== Compter les références ===== * alloc, new, copy, mutableCopy... --> ARP. Propriétaire de l'objet. Compteur de références = 1 * SINON --> NON ARP. Pas propriétaire de l'objet. Compteur de références = 1 * Pour retenir un objet dont on N'EST PAS propriétaire [monObjet retain] * Pour décrémenter le compteur de références d'un objet non ARP [monObjet release] * Pour décrémenter le compteur de références d'un objet ARP [monObjet autorelease] * Un objet continue d'exister tant que son compteur de références est supérieur à zéro, donc tant qu'il a au moins un propriétaire. * Lorsque le compteur de référence d'un objet atteint zéro, il reçoit dealloc. ===== Callbacks et propriétés ===== L'utilisation de [[objc:evenements_callbacks|callbacks, délégués ou notifications]] peut poser des problèmes de propriétés des objets. Quelques règles : ==== Notifications ==== * Les notification centers ne sont pas propriétaires des observers. Un observer doit se retirer du centre de notification - (void)dealloc { [[NSNotificationCenter defaultCenter] removeObserver:self]; } ==== Délégués ==== * les objets ne sont pas propriétaires de leurs délégués et sources de données. La méthode dealloc du délégué ou de la source de données doivent se retirer eux-même : - (void)dealloc { [objetQuiMeFaitTravailler setDelegate:nil]; [objetQuiUtiliseMesDonnées setDataSource:nil]; } ==== Cibles ==== * Les objets ne sont pas propriétaires de leurs cibles. Une cible doit mettre à zéro le pointeur de cible dans sa méthode dealloc - (void)dealloc { [objetQuiMenvoieDesMessages setTarget:nil]; }