ios - libobjc dealloc 中的 KERN_PROTECTION_FAILURE(堆栈溢出)

标签 ios objective-c iphone cocos2d-iphone stack-overflow

我最近收到了如下所示的崩溃报告:

0 libobjc.A.dylib 0x0000000193dfea88 object_cxxDestructFromClass(objc_object*, objc_class*) + 0 1 libobjc.A.dylib 0x0000000193e0bf34 objc_destructInstance + 88 2 libobjc.A.dylib 0x0000000193e0bf8c object_dispose + 24 3 我的应用程序 0x00000001000d88fc -[CCAction dealloc] + 44 4 我的应用程序 0x00000001000e6bf8 -[CCActionSequence .cxx_destruct] + 36 5 libobjc.A.dylib 0x0000000193dfeb18 object_cxxDestructFromClass(objc_object*, objc_class*) + 144 6 libobjc.A.dylib 0x0000000193e0bf34 objc_destructInstance + 88 7 libobjc.A.dylib 0x0000000193e0bf8c object_dispose + 24 8 我的应用程序 0x00000001000d88fc -[CCAction dealloc] + 44 9 我的应用程序 0x00000001000e6bf8 -[CCActionSequence .cxx_destruct] + 36 10 libobjc.A.dylib 0x0000000193dfeb18 object_cxxDestructFromClass(objc_object*, objc_class*) + 144 11 libobjc.A.dylib 0x0000000193e0bf34 objc_destructInstance + 88 12 libobjc.A.dylib 0x0000000193e0bf8c object_dispose + 24 13 我的应用程序 0x00000001000d88fc -[CCAction dealloc] + 44 14 我的应用程序 0x00000001000e6bf8 -[CCActionSequence .cxx_destruct] + 36

...它会一直这样下去。 dealloc 中发生某种无限递归,导致堆栈溢出。

只有 2 个方法调用对我可见,其中之一是 .cxx_destruct,它是 ARC 使用的内部私有(private)方法。另一个是CCActiondealloc方法,里面只有一条log语句:

-(void) dealloc { CCLOGINFO(@"cocos2d: deallocing %@", self); }

崩溃真的很难重现;我只见过一次。但是我的应用程序尚未向公众发布,所以我真的很想弄清楚是什么原因造成的。非常感谢任何调试帮助。

我正在使用 Cocos2D 3.3.0iOS 8.1

最佳答案

如果您使用的是 ARC,则在 dealloc 中向 self 发送消息不会像以前在手动内存管理中那样工作。 ARC 在调用 dealloc 之前在 .cxx_destruct 中完成所有清理/处理,因此在 dealloc 中将消息发送到 self将导致未定义的行为 - 很可能会崩溃。与手动内存管理不同,您可以在调用 [super dealloc] 之前在 dealloc 中向 self 发送消息。

从您的代码看来,CCLogInfo 正在向 self 发送消息,很可能是 [self description](假设 CCLogInfo 参数只是带有参数的格式字符串)。这会导致崩溃,但我不确定为什么会导致递归 - 你能把代码分享给 CCLogInfo 吗?

关于ios - libobjc dealloc 中的 KERN_PROTECTION_FAILURE(堆栈溢出),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27747131/

相关文章:

iphone - 旋转 UIImageView 将图像移出屏幕

objective-c - 以编程方式编辑 Info.plist 可能吗?

ios - 如何从iOS中旋转,缩放和倒置的UIImageView中提取UIImage

iphone - 检测 NSNumber 是否在 0 到 255 之间

iphone - Xcode4 导航器中的奇怪符号

ios - 创建模糊叠加 View

ios - 如何为 Storyboard初始化的开关按钮设置默认 boolean 值

ios - CFUUID数组?

ios - viewControllerAfterViewController : does not get called with UIPageViewController

objective-c - NSTableView 支持增量搜索吗?