2010-02-12 5 views
0

Courir mon application dans le simulateur en vertu des instruments pour vérifier les fuites de mémoire, il semble indiquer une fuite dans ce bloc de code:L'outil de fuite de mémoire d'Instruments rencontre-t-il des problèmes avec les boucles «for»?

De toute évidence, dans cette boucle, je suis alloc/s'être initialisé un objet, mais le relâcher quand j'en ai fini avec. Je me demande si c'est juste un symptôme de la façon dont les instruments voient l'activité dans cette boucle, ou si je perds la tête (ou si je fais quelque chose d'autre complètement faux).

Répondre

2

Vous stashing chaque message que vous créez en messages ... êtes-vous sûr que que ne fuit pas finalement (et donc les choses dedans)? Ou peut-être que la mémoire fuit dans votre initialiseur, ou les accesseurs de propriété?

+0

"messages" est renvoyé au délégué de cette classe et publié par cette classe. Il semble être bien géré par cette classe (l'accesseur pour cela libère l'ancien et conserve le nouveau, et le libère dans dealloc). Si des messages, ou une classe propriétaire de messages, étaient divulgués, je verrais un MSNutableArray apparaître comme une fuite, n'est-ce pas? – ChrisW

+0

Le diable est dans les détails. Dans cette classe de délégué (une sous-classe UITableViewController), il crée des objets de sous-classe UITableViewCell personnalisés qui ne libéraient pas l'objet 'message' qui leur avait été donné. Appréciez les commentaires, cependant, c'est ce qui m'a fait creuser! – ChrisW

1

Fuites seulement vous montre où la mémoire fuite a été attribué ...

Pensez à ce que un moyen de fuite. Cela signifie que quelque part, vous devriez avoir une ligne de code qui a publié quelque chose, mais vous n'avez pas cette ligne de code. Les fuites ne peuvent pas vous montrer du code qui n'existe pas! Donc, ce qui veut dire, c'est que l'un des objets du message est retenu ailleurs et ne lâche jamais - OU que tout le tableau des messages a été divulgué quelque part, mais que l'allocation du tableau est également visible dans les fuites.