2009-06-03 7 views
1

C'est vraiment étrange. J'ai une sous-classe UIImageView vide qui implémente les méthodes -touchesEnded :, -touchesMoved, et -touchesBegan:. Les implémentations de ces méthodes sont vides. Ils ne font rien. Cependant, lorsque je lance Instruments avec "Leaks", et que je touche l'UIImageView et déplace mon doigt en dehors de cette UIImageView tout en touchant l'écran, je reçois un avertissement de fuite de mémoire de la part d'Instruments.Pourquoi ai-je cette étrange fuite de mémoire lorsque je touche mon UIImageView?

Dans mon application de démonstration, il n'y a aucune attribution d'objet qui se passe en faisant cela. Les méthodes sont vides. Tout ce que je lis dans Instruments est lié aux trucs Foundation et Run Loop. J'ai vérifié deux fois ma classe et supprimé toute allocation d'objet. C'est juste un skelleton qui montre seulement une image, mais cette image n'est pas changée en la touchant ou en déplaçant le doigt sur l'écran. Ça n'a aucun sens.

Est-ce que quelqu'un d'autre a rencontré des problèmes comme celui-ci?

MISE À JOUR: J'ai testé un peu plus et j'ai découvert que les fuites de mémoire se produisent à n'importe quel endroit de l'écran lorsque je tapote avec 5 doigts. Tout ce que j'obtiens d'Instruments.app concerne certaines boucles d'exécution et d'événements. Il semble que l'appareil ne puisse pas manipuler les touches assez rapidement et se bloque à un moment donné en libérant les objets alloués. S'il vous plaît essayer et signaler ici si vous pouvez voir les mêmes problèmes.

MISE À JOUR: J'ai également testé quelques exemples d'applications Apple. Quand je bidouille avec 3 - 5 doigts sur l'écran, comme le fait un utilisateur normal (oui, ils le feront!), Alors Instrument montre des fuites de mémoire concernant les boucles d'événements et d'exécution. Certainement il y a un gros dans le cadre, ou dans les instruments. Testé avec iPhone OS 2.2.1.

Répondre

2

En lisant sur un forum Apple, c'est un problème non résolu dans le SDK. Cela arrive quand le délégué de l'accéléromètre n'est pas nul. Les objets d'événement tactile sont alloués mais jamais libérés. Plus le délégué de l'accéléromètre est appelé rapidement, plus ces échecs d'allocation sont rapides. De nombreux codes d'échantillons de pommes présentent le même problème. J'ai allumé l'accéléromètre. Mais j'ai aussi découvert que ce genre de fuite se produit lorsqu'un contact est suivi d'une vue à l'autre. Si je continue à toucher une seule et même vue et à déplacer mon doigt sur cette vue sans la quitter, je n'aurai pas ce problème. Solutions: Désactivez l'accéléromètre (le délégué est réglé sur zéro), réduisez le nombre de vues dans votre application. Je ne sais pas si ils ont résolu ce problème dans iPhone OS 3.0.

Malheureusement, cela ne va pas aider:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 
    [[UIAccelerometer sharedAccelerometer] setDelegate:nil]; // because of framework bug 
} 

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { 
    [[UIAccelerometer sharedAccelerometer] setDelegate:self]; // because of framework bug 
} 

- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event { 
    [[UIAccelerometer sharedAccelerometer] setDelegate:self]; // because of framework bug 
} 

Plus d'infos sur: http://discussions.apple.com/thread.jspa?messageID=9396584t

+0

l'accéléromètre est encore troués comme l'enfer dans la version 3.0. Merci pour cela. – SpaceDog

+0

Salut, j'ai le même problème, quand je tape l'écran en continu nombre de fois très rapidement. Dans les fuites, il montre que l'allocation de mémoire est augmentée d'environ 16 Mo. Mais, quand je tape normalement comme si je jouais à un jeu, il n'y avait pas d'augmentation de mémoire en allocation. Le problème du SDK est-il résolu? Je vous remercie. –