J'ai quelques, plein écran, UIColor PatternImages
(en scrollViews
) dans mon application iPad et je rencontre quelques problèmes de mémoire (surprise?)
Quand je commencé à avoir des problèmes de mémoire, je mis en œuvre le chargement paresseux dans mes scrollviews.
Lorsque les problèmes ont continué, je me suis déplacé loin des méthodes d'usine (comme [UIColor colorWithPatternImage:...]
) à « alloc » méthodes ed (comme [[UIColor alloc]initWithPatternImage:...]
), pour que je puisse répondre aux avertissements de mémoire en libérant les pages. Cependant, chaque fois que je publie mon UIColor PatternImages, j'obtiens une erreur “EXC_BAD_ACCESS”
.manière correcte de libérer un UIColor PatternImage
Au début, je pensais que cela pouvait être causé par mes images de modèle [UIImage imageNamed:...]
, donc je suis passé à [[UIImage alloc]initWithContentsOfFile:...]
images, mais cela n'a pas aidé. Tout à l'heure, je mets NSZombiesEnabled
et il me dit que le problème est:
-[UICGColor release]: message sent to deallocated instance 0x187b50
Avec le backtrace:
#0 0x35823910 in ___forwarding___()
#1 0x35823860 in __forwarding_prep_0___()
#2 0x357e53c8 in CFRelease()
#3 0x357e48de in _CFAutoreleasePoolPop()
#4 0x3116532c in NSPopAutoreleasePool()
#5 0x341a7508 in _wrapRunLoopWithAutoreleasePoolHandler()
#6 0x3580ac58 in __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__()
#7 0x3580aacc in __CFRunLoopDoObservers()
#8 0x358020ca in __CFRunLoopRun()
#9 0x35801c86 in CFRunLoopRunSpecific()
#10 0x35801b8e in CFRunLoopRunInMode()
#11 0x320c84aa in GSEventRunModal()
#12 0x320c8556 in GSEventRun()
#13 0x341dc328 in -[UIApplication _run]()
#14 0x341d9e92 in UIApplicationMain()
#15 0x00002e5e in main (argc=1, argv=0x2fdff610) at...
Je n'ai aucun UICGColor
objets non plus, donc je pense que d'une certaine manière mon "alloc" ed UIColors
ont sous-jacents UICGColor
autorelease objets ...? Des idées/points de vue?
Concernant votre dernière section de code, bien sûr vous ne devez pas libérer le 'CGImage' parce que vous ne possédez pas le propre (vous n'avez pas appelé' create', 'new' ou' retain'). Vous devriez probablement lire les guides de gestion de la mémoire (pour Cocoa _and_ Core Foundation à nouveau). –
Oh bien sûr - négligent. Je vais supprimer cette partie de la question. Merci. Une idée sur le reste? OK, guide de lecture maintenant ... – iPadDeveloper2011
Après avoir lu quelques-uns des guides mm maintenant (merci @Ole), je crois que cela ne devrait pas avoir d'importance si la patternImage est fabriquée ou allouée. InitWithPatternImage devrait commencer par conserver le UIImage, et c'est la retenue qui est libérée dans UIColor dealloc. – iPadDeveloper2011