Reg:修改正在定义的图层… :发送到释放实例的消息0xe43c520

我陷入了一个非常奇怪的问题。 我希望你们中的许多人可以提供我的投入来解决这个问题。 我的应用程序经常中断,但我无法得到确切的情况。

在日志中我得到以下

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 

以下是我的堆栈跟踪。 它在主线程中断了

 #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 

以下是NSZombie对象的乐器输出。 这指向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] 

没有指向代码。 有没有人遇到过这样的问题? 如果是,请让我知道以下
1)当我们得到“正在完成的修改层”的突破问题?
2)是由于UIView层? 例如(view.layer.cornerRadius)?
3)堆栈跟踪指向UINAvigationBar,有没有什么办法来覆盖的方法和试用一些东西?

任何帮助表示赞赏。 谢谢

当您正在尝试修改CALayer正在释放的过程中的属性时,会出现错误"modifying layer that is being finalized" 。 我已经看到这种情况发生,当我意外地使用一个访问器清除CALayer属性,而在该层的-dealloc方法。

如果更新任何与显示有关的内容(这样触摸底层的CALayer),这也可能发生在UIView的-dealloc方法中。

在你的情况下,由于僵尸消息,它看起来像在某处过度释放一个UIView。 "modifying layer that is being finalized"只是一个副作用,因为在某些时候,当UIView被释放之前,它会更新UIView。

打开断点,确保已经设置了抛出exception的断点,然后在debugging器中运行应用程序。 它应该停止在一个消息被发送到一个过度发布的UIView,这应该告诉你哪个视图是在这个中心线上。 然后你可以回溯find你发送了太多的发布消息的地方(或者如果你需要超出当前的范围,可以自动发布而不需要保留)。

因为您已经有证据指向UINavigationBar,请检查它及其相关视图以确保您正确保留它。

当意外地尝试释放一个不应该被释放的对象时,我得到了这个错误,并将其用于UIViewanimation块。 修复,使问题消失。

@ MegaMind-我也坚持这个问题“修改层正在最终确定”,导致应用程序退出,但我能够解决这个问题。 我想你正在释放UIView出现时被调用的任何对象。

当我释放一个没有调用alloc的对象时,我得到了这个错误,所以可能是这样。

为了帮助noobs(像我)谁不能看到他们的内存错误。 MGMT,

我也得到这个错误,因为我错误地使用了一个IBOutlet属性上的'分配',应该有一个'保留'它。 复制粘贴时要小心!

得到这个错误,当我点击一个UIButton。 有趣的是,UIbutton没有错,但实际上在button下面的子视图之一。 我发现了一个子视图,它有额外的发布。