Compteur de référence à 2 sur [[NSNumber alloc] init]
Bonjour,
Le thème de week-end étant la gestion de la mémoire, je serais curieux de savoir pourquoi dans ce simple cas le compte de référence vaut 2...
NSNumber *number=[[NSNumber alloc] initWithInt:10];
NSLog(@retainCount:%d,[number retainCount]);
Merci.
Le thème de week-end étant la gestion de la mémoire, je serais curieux de savoir pourquoi dans ce simple cas le compte de référence vaut 2...
NSNumber *number=[[NSNumber alloc] initWithInt:10];
NSLog(@retainCount:%d,[number retainCount]);
Merci.
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Donc si tu alloues 2 objets NSNumber avec le même nombre 10, tu auras le même pointeur.
Comme il est déjà créé avant ton alloc () , tu auras forcément un refcount supérieur à 1 : c'est une sorte de shared object propre à l'optimisation de NSNumber.
Ah oui, en fait faut voir la doc sur CFNumber, puisque NSNumber n'est qu'une toll free bridged class.
Résultat :
Avec #define VALUE 2008
% gcc pgm.m -o pgm -framework Foundation
% pgm
string : 1 , number : 1, indexPath : 3
Non Equals , number : 1
%
Avec #define VALUE 10 par contre, on a :
% gcc pgm.m -o pgm -framework Foundation
% pgm
string : 1 , number : 2, indexPath : 3
Equals , number : 3
%
De plus dans ta 2e exécution quand tu dis remplacer 2008 par 10, tu dis que ça t'affiche "Equals" et pas "number1=number2"
Y'a emmêlage de pinceaux, là
--
Sinon je propose qu'à chaque fois que Philippe49 répond à une question les forums par un "Un petit essai" suivi d'un bout de code (extrait d'un test dans un FoundationTool avec juste [tt]main[/tt]), que celui qui a posé ladite question lui offre au moins une petite tournée Et que tout le monde puisse en profiter, au passage ;D
Parce que c'est pas pour dire mais ça arrive vachement souvent quand même :P
Quand à m'offrir un coup à boire, il ne faut pas hésiter ...