====== 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];
}