5 votes

Objectif C : Que signifie l'attribution d'un "compte" (à l'aide d'instruments)

J'ai exécuté mon application à l'aide d'Instruments et j'ai constaté que le compte de l'allocation de l'une de mes méthodes [UICustomButton loadButton ]" augmente constamment (voir la capture d'écran ci-dessous).

enter image description here

La méthode en question est déclenchée lorsque je fais défiler un tableau et lorsque la cellule est visible.

Mes questions sont les suivantes

1) Que signifie réellement le comptage ? Est-il normal qu'il continue à augmenter ?

2) L'augmentation du nombre d'unités est-elle la raison pour laquelle mon défilement devient de plus en plus lent ?

4voto

Tomasz Stanczak Points 4790

Le compte dans les instruments montre le nombre d'instances d'une classe donnée que votre application a créée et qui sont encore en vie. Il est donc normal qu'il augmente jusqu'au moment où votre application a créé tous les objets dont elle a besoin, puis il devrait rester plus ou moins constant (plus ou moins parce que vous serez probablement en train de créer et de libérer des objets tout le temps).

Si le compte ne cesse d'augmenter, vous avez probablement une fuite d'objets - créés et non libérés correctement. Cela peut conduire à un ralentissement (si vous créez des objets coûteux en performance ou si vous devez travailler avec toutes les instances qui deviennent de plus en plus nombreuses par exemple), mais cela conduira certainement à un crash après que vous ayez utilisé plus de mémoire que ce que votre application est autorisée à utiliser.

Avez-vous réutilisé des cellules dans le tableView ? Vous devriez, sinon vous obtiendrez ce même effet : augmentation du nombre d'instances, augmentation de l'utilisation de la mémoire, défilement lent et plantage au bout d'un certain temps.

0voto

Radix Points 1915

Maintenant que j'ai compris le concept du compte, je vais essayer d'expliquer ceci, le compte se réfère au nombre de réclamations de propriété que vous avez en suspens sur un objet et peut être vérifié avec l'aide d'une fonction appelée -retainCount, mais vous ne devriez jamais prêter attention à la valeur du compte de maintien car il n'est jamais correct et toujours confus,

vous ne savez pas ce qui est conservé, pourquoi il est conservé, qui le conserve, quand il a été conservé, etc.

Par exemple :

You'd think that [NSNumber numberWithInt:1] would have a retainCount of 1. It doesn't. It's 2.
You'd think that @"Foo" would have a retainCount of 1. It doesn't. It's 1152921504606846975.
You'd think that [NSString stringWithString:@"Foo"] would have a retainCount of 1. It doesn't. Again, it's 1152921504606846975.

En fait, puisque tout peut retenir un objet (et donc modifier son retainCount), et puisque vous n'avez pas la source de la plupart du code qui fait fonctionner une application, le retainCount d'un objet n'a aucune signification.

Si vous essayez de savoir pourquoi un objet n'est pas désalloué, utilisez l'outil Leaks dans Instruments. Si vous cherchez à savoir pourquoi un objet a été désalloué trop tôt, utilisez l'outil Zombies dans Instruments.

Mais n'utilisez pas -retainCount. C'est une méthode vraiment inutile.

Prograide.com

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.

Powered by:

X