Je voudrais savoir en quelle situation avez vous utiliser `` jusqu’ici et finalement les problèmes qui peuvent arriver à l’utiliser.
Merci.
Je voudrais savoir en quelle situation avez vous utiliser `` jusqu’ici et finalement les problèmes qui peuvent arriver à l’utiliser.
Merci.
Vous ne devez jamais utiliser -retainCount
,, car il ne vous dit rien d'utile. La mise en œuvre de la Fondation et AppKit/UIKit cadres est opaque; vous ne savez pas ce qui est retenu, pourquoi c'est conservée, qui est retenue, quand il a été retenu, et ainsi de suite.
Par exemple:
[NSNumber numberWithInt:1]
aurait un retainCount
de 1. Il n'a pas. C'est 2.@"Foo"
aurait un retainCount
de 1. Il n'a pas. C'est 1152921504606846975.[NSString stringWithString:@"Foo"]
aurait un retainCount
de 1. Il n'a pas. Encore une fois, c'est 1152921504606846975.En gros, depuis que tout peut retenir les services d'un objet (et donc d'altérer sa retainCount
), et puisque vous n'avez pas la source de la majeure partie du code qui s'exécute une application, d'un objet, retainCount
est vide de sens.
Si vous essayez de repérer pourquoi un objet n'est pas libéré, utilisez les Fuites de l'outil dans les Instruments. Si vous essayez de repérer pourquoi un objet a été libéré trop tôt, utilisez les Zombies de l'outil dans les Instruments.
Mais ne pas utiliser -retainCount
. Il est vraiment inutile de méthode.
modifier
Veuillez aller à tout le monde http://bugreport.apple.com et demande qu' -retainCount
être abandonné. Les plus de gens qui demandent pour le mieux.
edit #2
Comme une mise à jour,[NSNumber numberWithInt:1]
a maintenant un retainCount
de 9223372036854775807. Si votre code m'attendais à être 2, votre code a rompu.
Sérieusement. Il suffit de ne pas le faire.
Il suffit de suivre la Gestion de la Mémoire de lignes Directrices et de ne publier que ce que vous alloc
, new
ou copy
(ou tout ce que vous appelé retain
à l'origine).
@bbum dit mieux ici DONC, et encore plus en détail sur son blog.
Objets de Autoreleased sont un cas où vérifier - retainCount est imprécis et potentiellement trompeur. Le comte de conserver vous ne dit rien sur le nombre de fois - autorelease a été appelée sur un objet et, par conséquent, combien de temps il seront libérés lorsque l’actuelle piscine autorelease draine.
J’ai trouvez-vous retainCounts très utile lorsque vérifié à l’aide des « Instruments » .
À l’aide de l’outil « allocations », assurez-vous que « Compteurs de référence de dossier » sont activés et vous pouvez aller dans n’importe quel objet et voir son histoire retainCount.
En couplant les allocations et les communiqués, vous pouvez obtenir une bonne image de ce qui se passe et souvent résoudre ces cas difficiles où quelque chose n’est pas libéré.
C’a m’a jamais laissé tomber - y compris la recherche de bogues dans les premières versions bêta de l’iOS.
Jetez un oeil à la documentation d'Apple sur NSObject, il couvre assez bien à votre question: NSObject retainCount
En bref, retainCount est probablement inutile pour vous, sauf si vous avez mis en œuvre votre propre système de comptage de référence (et je peux presque garantir que vous n'aurez pas).
Apple, avec ses propres mots, retainCount est "généralement d'aucune utilité pour le débogage des problèmes de gestion mémoire".
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.