2010-02-23 3 views
3

Comment l'outil XCode Instrument Leak détermine-t-il si un objet est une fuite ou s'il n'est pas encore sorti? Je suis assez nouveau pour Objective C, l'outil de détection de fuites détecte une fuite dans le code avec lequel je travaille. Mais le code me semble bien. Donc, je me demande juste combien puis-je faire confiance à cet outil?Comment fonctionne la détection de fuite de mémoire XCode?

Répondre

4

Une "fuite" en tant qu'objet qui est toujours alloué, mais votre application n'a plus de référence pointant vers cet objet. Puisque vous n'avez plus de référence, vous ne pourrez pas libérer l'objet, donc c'est une fuite.

Comme le dit leaks(1) man page:

identifie les fuites mémoire des fuites - mémoire que l'application a alloué, mais a été perdu et ne peuvent pas être libérés. Plus précisément, les fuites examinent la mémoire d'un processus spécifié pour les valeurs qui peuvent être des pointeurs vers des tampons alloués par malloc. Tout tampon accessible à partir d'un pointeur dans la mémoire inscriptible, un registre, ou sur la pile est supposé être de la mémoire en cours d'utilisation. Tout tampon accessible à partir d'un pointeur dans un tampon pouvant être atteint est également supposé être utilisé. Les tampons qui ne sont pas accessibles sont des fuites; les tampons ne pourraient jamais être libérés parce qu'aucun pointeur existe en mémoire dans la mémoire tampon, et donc libre() ne pourraient jamais être appelés pour ces tampons

Vous pouvez également regarder dans l'outil ObjectAlloc d'instruments.

+1

Merci, je comprends ce qu'est la fuite, je me demande simplement si XCode a la réputation de donner de fausses alarmes. Merci de me signaler l'outil ObjectAlloc, j'ai trouvé quel est le problème avec son aide. Il y a effectivement une fuite. –

+1

L'outil de fuites s'est beaucoup amélioré au fil du temps. Il crache rarement un faux positif ces jours-ci. Très rarement. – bbum