【问题标题】:Error: *** -[CALayer retain]: message sent to deallocated instance 0xdaa54d0错误:*** -[CALayer 保留]:消息发送到已释放的实例 0xdaa54d0
【发布时间】:2026-01-13 22:45:02
【问题描述】:

我正在开发简单的 iphone 应用程序。我正在处理两个视图。我首先推动了另一个视图控制器,当我删除当前视图以返回旧视图控制器时,我得到 [CALayer 保留]。 EXEC_BAD_ACCESS.

在 gdb 中,我尝试使用 backtrace 命令查看下面给出的问题,但我找不到任何问题。如果有人能帮我解决这个问题,那就太好了。

(gdb) 回溯

#0  0x02e21434 in ___forwarding___ ()
#1  0x02e209f2 in __forwarding_prep_0___ ()
#2  0x02dc7f58 in CFRetain ()
#3  0x02dc7a65 in CFArrayCreate ()
#4  0x02dfe043 in -[__NSPlaceholderArray initWithObjects:count:] ()
#5  0x0296eda3 in -[CALayerArray copyWithZone:] ()
#6  0x02ea380a in -[NSObject copy] ()
#7  0x004f742a in -[UIView dealloc] ()
#8  0x00214cb2 in NSPopAutoreleasePool ()
#9  0x004d3698 in _UIApplicationHandleEvent ()
#10 0x035fe17c in PurpleEventCallback ()
#11 0x02df289c in CFRunLoopRunSpecific ()
#12 0x02df18a8 in CFRunLoopRunInMode ()
#13 0x035fc89d in GSEventRunModal ()
#14 0x035fc962 in GSEventRun ()
#15 0x004d1372 in UIApplicationMain ()
#16 0x00002074 in main (argc=1, argv=0xbffff020) at /Users/jtong/Desktop/Elle/main.m:14

谢谢, 阿比

【问题讨论】:

    标签: iphone calayer retain retaincount exc-bad-access


    【解决方案1】:

    使用仪器并启用僵尸。这将跟踪每个对象被保留和释放的位置,并且您将诊断出额外释放发生的位置。

    How to run iPhone program with Zombies instrument?

    【讨论】:

    • 嘿,保罗,我试过了,但这不起作用。当我使用性能工具启动我的应用程序时,它崩溃了..
    【解决方案2】:

    听起来您还明确发布了您已经自动发布的内容。

    【讨论】:

    • 我发现问题出在 dealloc 中。我没有以适当的方式释放。感谢您的回复。
    • 在交易中。我错误地保留了一个对象 [arr dealloc].. 而不是 [arr release]。这导致了一个问题。
    • 是的。所有的堆栈跟踪都告诉你它是可见的(CALayer),所以它可能是 UILabel、UIImageView 等。令人讨厌的模糊。提示:搜索“释放”并检查您是否有匹配的保留或分配。