发送到解除分配的实例

sky*_*erl 18 iphone objective-c calayer retain

每当我将视图控制器推到我的堆栈上,然后将其弹出,我收到此错误:

*** -[CALayer retainCount]: message sent to deallocated instance <memory address>
Run Code Online (Sandbox Code Playgroud)

它似乎发生在dealloc正在弹出的视图控制器上调用之后,并且仅对此视图控制器是独占的.我确定CALayer与视图本身有关,因为我不使用它们.

有任何想法吗?

编辑:这是回溯

(gdb) bt
#0  0x01fcd3a7 in ___forwarding___ ()
#1  0x01fa96c2 in __forwarding_prep_0___ ()
#2  0x01fc10e8 in CFGetRetainCount ()
#3  0x01cbc770 in CA::release_root_if_unused ()
#4  0x01cbc707 in x_hash_table_remove_if ()
#5  0x01cbc4ec in CA::Transaction::commit ()
#6  0x01cc4838 in CA::Transaction::observer_callback ()
#7  0x01fa5252 in __CFRunLoopDoObservers ()
#8  0x01fa465f in CFRunLoopRunSpecific ()
#9  0x01fa3c48 in CFRunLoopRunInMode ()
#10 0x027dd615 in GSEventRunModal ()
#11 0x027dd6da in GSEventRun ()
#12 0x0057cfaf in UIApplicationMain ()
#13 0x00002dec in main (argc=1, argv=0xbfffeed0) 
Run Code Online (Sandbox Code Playgroud)

小智 12

我有类似的问题; 结果我没有正确地保留UIButton.我是如何找到原因的: - 启用僵尸 - 使用'Allocations'工具运行项目 - 使用应用程序触发错误 - 检查Instruments在时间线上显示消息'Zombie Messaged' - 应该有一个链接打开CALayer详细信息:当它被分配和解除分配时 - 你对分配的地方感兴趣,应该是那个啊哈!放在你的代码中

祝好运!


cus*_*nho 7

这有点棘手,我的是在一个类(m/xib)的dealloc函数中的双重释放,我在tableview中作为行样式.仪器没有对这个对象有太多的了解,但检查callstack 确实有助于确定哪个类是-1.

样品


sky*_*erl 0

我偷偷怀疑这与自动释放池有关......