2010-05-07 8 views
3

Lors du débogage dans les instruments utilisant 'ObjectAlloc', je remarque que 7 megs de mémoire sont alloués pour l'appel renderInContext, mais il n'est jamais libéré. Lorsque je commente l'appel renderInContext cela ne se produit pas, et les prochains appels renderInContext ne continueront pas à augmenter l'allocation de mémoire.renderInContext créer de la mémoire qui n'est pas libérée rapidement

UIGraphicsBeginImageContext(contentHolder.bounds.size); 
[contentHolder.layer renderInContext:UIGraphicsGetCurrentContext()]; 
UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 

Existe-t-il un moyen de forcer la libération de cette mémoire?

+0

Il peut s'agir d'un cache appartenant à la couche. Que se passe-t-il si/quand vous relâchez le calque? –

+0

Je suis également confronté au même problème. Quelqu'un at-il pourquoi il fait des fuites de mémoire? –

+0

Mon problème est parti quand j'ai commencé à compiler pour 4.2 –

Répondre

1

J'ai découvert comment libérer la mémoire renderInContext. Il suffit d'exécuter la méthode appelant renderInContext sur Main Thread et cela libèrera la mémoire allouée automatiquement.

+1

Je ne sais pas pourquoi Apple ne résout pas cela après ne pas nous permettre d'utiliser UIGetScreenImage qui est comme 10x plus rapide. Si nous faisons une capture d'un iPad Retina, l'interface utilisateur serait retardée à cause de renderInContext bloquant le thread principal. renderInContext est très très lent comme je l'ai vu dans les instruments. – mskw

+0

En plus de renderInContext ayant des problèmes de mémoire s'exécutant sur un thread non principal, il ne fonctionne pas bien sur certaines vues iOS 6 telles que MKMap Views ou toute vue utilisant OpenGL ES (il ne plantera pas les cartes dans le thread principal). Il se bloque profondément dans les sous-systèmes vidéo. – mskw