Reg: la modification de la couche qui est en cours de finalisation... [CALayer image]: message envoyé à désalloué instance 0xe43c520
Je suis coincé avec un très étrange question. J'espère que beaucoup d'entre vous pouvez me donner d'entrée de résoudre ce problème.
Ma demande pauses assez souvent, mais je ne suis pas en mesure d'obtenir le scénario exact.
Dans le Journal je obtenir suivantes
2011-02-10 16:22:12.914 RCA-iOS[4132:8327] modifying layer that is being finalized - 0xe43c520
2011-02-10 16:22:13.253 RCA-iOS[4132:207] modifying layer that is being finalized - 0xe43c520
2011-02-10 16:22:13.270 RCA-iOS[4132:207] modifying layer that is being finalized - 0xe43c520
2011-02-10 16:22:13.270 RCA-iOS[4132:207] modifying layer that is being finalized - 0xe43c520
2011-02-10 16:22:13.272 RCA-iOS[4132:207] *** -[CALayer frame]: message sent to deallocated instance 0xe43c520
Qui suit est ma Trace de la Pile. Il les pauses dans le thread principal
#0 0x01978057 in ___forwarding___
#1 0x01a07b42 in __forwarding_prep_1___
#2 0x003c196a in -[UIView(Geometry) frame]
#3 0x003f5ff4 in -[UINavigationBar _getTitleViewFrame:leftViewFrame:rightViewFrame:forViews:forItemAtIndex:]
#4 0x003e5cab in -[UINavigationBar _getTitleViewFrame:leftViewFrame:rightViewFrame:forViews:]
#5 0x003f0c06 in __-[UINavigationBar layoutSubviews]_block_invoke_1
#6 0x003bdb5c in +[UIView(Animation) _performWithoutAnimation:]
#7 0x003f76bb in -[UINavigationBar layoutSubviews]
#8 0x00f59451 in -[CALayer layoutSublayers]
#9 0x00f5917c in CALayerLayoutIfNeeded
#10 0x00f5237c in CA::Context::commit_transaction
#11 0x00f520d0 in CA::Transaction::commit
#12 0x00f827d5 in CA::Transaction::observer_callback
#13 0x019e7fbb in __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__
#14 0x0197d0e7 in __CFRunLoopDoObservers
#15 0x01945bd7 in __CFRunLoopRun
#16 0x01945240 in CFRunLoopRunSpecific
#17 0x01945161 in CFRunLoopRunInMode
#18 0x02129268 in GSEventRunModal
#19 0x0212932d in GSEventRun
#20 0x0039e42e in UIApplicationMain
#21 0x00001fd0 in main at main.m:14
Et à la Suite est la sortie de l'Instrument pour NSZombie objet. Cette points de UIKit
# Category Event Type RefCt Timestamp Address Size Responsible Library Responsible Caller
0 CALayer Malloc 1 25304068864 0x10837840 48 UIKit -[UIView _createLayerWithFrame:]
1 CALayer Zombie -1 99780847872 0x10837840 0 UIKit -[UIView(Geometry) frame]
Rien point du code. Est-ce quelqu'un fait face à ce genre de problème? Si oui, s'il vous plaît laissez-moi savoir la suite
1) Quand nous arrivons à la "Modification de la couche qui est en cours de finalisation" la rupture de problème?
2) Est due à la couche de UIView? Par exemple (point de vue.la couche.cornerRadius) ?
3) Trace de la Pile des points de UINAvigationBar, est-il possible de surcharger les méthodes et d'essai quelque chose?
Toute aide est appréciée. Grâce
OriginalL'auteur D25 | 2011-02-10
Vous devez vous connecter pour publier un commentaire.
L'erreur
"modifying layer that is being finalized"
se produit lorsque vous tentez de modifier les propriétés d'un CALayer quand il est en train d'être libéré. J'ai vu cela se produire lorsque j'ai utilisé accidentellement un accesseur pour effacer une propriété sur un CALayer alors qu'au sein de cette couche-dealloc
méthode.Cela peut aussi se produire à l'intérieur d'une UIView de
-dealloc
méthode si quoi que ce soit liés à l'affichage est mis à jour (donc de toucher le sous-jacent CALayer).Dans votre cas, il semble que vous êtes overreleasing une UIView quelque part, en raison de la zombie message. Le
"modifying layer that is being finalized"
est juste un effet secondaire de ce, parce qu'à un certain point, vous seriez mise à jour de la UIView bien qu'il sera libéré avant qu'il ne devrait.Tourner sur des points d'arrêt, assurez-vous que vous avez mis un point d'arrêt sur les exceptions étant jetés, et exécuter votre application dans le débogueur. Il faudrait s'arrêter sur la ligne où un message est envoyé à un overreleased UIView, ce qui devrait vous dire de ce point de vue est au centre de cette. Ensuite, vous pouvez revenir en arrière pour trouver à quel point vous êtes à l'envoi d'un trop grand nombre de libérer les messages (ou ont autoreleased sans retenue si vous en avez besoin au-delà de la portée actuelle).
Parce que vous avez déjà la preuve en montrant la UINavigationBar, de vérifier et de ses points de vue pour vous assurer que vous êtes correctement maintien.
Oui, le filetage peut être une très bonne source de problèmes de ce type. Assurez-vous que vous n'êtes pas la mise à jour des éléments d'interface utilisateur sur quoi que ce soit, mais le thread principal, ou même causer des actions qui pourraient indirectement conduire à une modification de l'interface utilisateur sur un thread d'arrière-plan. Aussi, soyez très prudent avec la gestion de la mémoire dans les threads, parce qu'il y a la possibilité que vous avez accidentellement relâcher quelque chose au mauvais moment ici.
Yup était un problème thread.
Eu un cas où je rejetais quelque chose dans ma classe dealloc qui n'a pas été retenu par ma classe, et qui était "possédé" par la super-classe (dû à une certaine classe de brassage). Compris dans environ 10 secondes après la lecture de ce qui précède.
Quelle belle réponse! ive été de rayonnages de mon cerveau et m'arracher les cheveux là-dessus. Avec votre suggestion, j'ai regardé par dessus mon code encore et réalisé que j'étais en libérant une UIview qui n'était pas liée à la fonction. Petite négliger cela m'a coûté 1,5 heures!
OriginalL'auteur Brad Larson
J'ai eu cette erreur lorsque accidentellement en essayant de libérer un objet qui ne doit pas avoir été publié, en collaboration avec l'utilisez pour une UIView bloc d'animation. Fixation que fait le problème.
OriginalL'auteur cleverbit
@MegaMind - j'ai aussi été bloqué avec ce problème de "modification de la couche qui est en cours de finalisation" qui cause app arrêter, mais je suis en mesure de résoudre ce problème. Je pense que vous vous libérez de tout objet qui est appelée lorsque UIView est apparu.
OriginalL'auteur iGW
J'ai eu cette erreur lorsque j'ai publié un objet qui n'a jamais eu alloc appelé sur elle, de sorte que pourrait-il être.
OriginalL'auteur Lance
Pour aider les noobs (comme moi) qui ne peux pas voir quelque chose de mal avec leurs mem. mgmt,
J'ai aussi reçu ce message, car j'ai utilisé à tort une "assign" sur un IBOutlet de la propriété qui a été censé avoir une 'conserver' sur elle.
Soyez prudent lorsque vous copiez-collez!
OriginalL'auteur mvishnu
Ai cette erreur lorsque je clique sur un UIButton. Le plus drôle, il n'y a rien de mal avec le UIbutton , mais en fait l'un des sous-vues en dessous du bouton. J'ai trouvé une sous-vue que a et version supplémentaire sur elle.
OriginalL'auteur yeahdixon