2010-10-17 23 views
0

Je suis nouveau à l'objectif C, j'ai un NSMutableArray avec 3 objets, puis j'essaie d'imprimer le retainCount du tableau. Pourquoi le final retainCount renvoie -1? MerciRetenir le compte dans l'objectif C retour -1

NSLog(@"myArray has retain count of %d", [myArray retainCount]);  
[myArray release]; 
NSLog(@"myArray has retain count of %d", [myArray retainCount]); 

Résultat de la console:

2010-10-17 11:58:06.407 TestRetainCount [527:a0f] myArray has retain count of 1 
2010-10-17 11:58:06.407 TestRetainCount [527:a0f] myArray has retain count of -1 

Répondre

3

Une fois qu'un objet a été désallouée (qui peut se produire après une sortie), vous ne pouvez plus compter sur ses données étant intactes. Vous essayez de faire confiance au nombre de retenue après qu'il est devenu invalide. Sur une note générale, n'utilisez pas le nombre de rétention. Déjà. Utilisez les règles du guide de programmation de gestion de la mémoire et vous obtiendrez toujours le compte de référence correct.

-1

Impossible de s'appuyer sur un retainCount précis en raison des objets auto-libérés de synchronisation. Cela dit, comptez votre alloc/init, new, retains, etc ... et faites correspondre avec la version correspondante.

+1

Il n'y a pas de compte de retenue dans GC (du moins pas en termes ObjC). Et, comme Graham l'a dit, vous ne pouvez effectivement jamais voir un nombre de retenue de 0 car l'objet est déjà désalloué à ce moment-là. – bbum

1

Graham Lee a répondu à la question spécifique à votre exemple.

pas spécifique à votre exemple, mais à votre question (sujet):

UINT_MAX est souvent utilisé pour désigner un objet qui utilise pas de comptage de référence (par exemple, n'est jamais désallouée, comme un singleton), ou implémentation de comptage de références personnalisées.