QuartzCore - iOS8中的崩溃

chr*_*ijk 8 iphone crash objective-c ios8

在发布我的iOS应用程序的新版本后,我经常遇到以下崩溃.

崩溃:WebThread EXC_BAD_ACCESS KERN_INVALID_ADDRESS位于0x80000012

这是令人恼火的崩溃之一,其中堆栈跟踪没有提供任何与其崩溃或导致崩溃的原因相关的线索.一个主要的问题是这次崩溃只发生在iOS8中.请在下面找到堆栈跟踪:

0 libobjc.A.dylib        objc_msgSend + 5 release
1 CoreFoundation         CFRelease + 600
2 QuartzCore             CA::release_objects(X::List<void const*>*) + 16
3 QuartzCore             -[CAAnimation dealloc] + 54
4 libobjc.A.dylib        objc_object::sidetable_release(bool) + 166
5 libobjc.A.dylib        (anonymous namespace)::AutoreleasePoolPage::pop(void*) + 404
6 CoreFoundation         _CFAutoreleasePoolPop + 16
7 Foundation             -[NSAutoreleasePool drain] + 122
8 CFNetwork              AutoAutoreleasePool::~AutoAutoreleasePool() + 24
9 CFNetwork              ___ZN27URLConnectionClient_Classic18_withDelegateAsyncEPKcU13block_pointerFvP16_CFURLConnectionPK33CFURLConnectionClientCurrent_VMaxE_block_invoke_2 + 166
10 CFNetwork             RunloopBlockContext::_invoke_block(void const*, void*) + 60
11 CoreFoundation        CFArrayApplyFunction + 36
12 CFNetwork             RunloopBlockContext::perform() + 182
13 CFNetwork             MultiplexerSource::perform() + 216
14 CFNetwork             MultiplexerSource::_perform(void*) + 48
Run Code Online (Sandbox Code Playgroud)

任何暗示都将非常感激.提前致谢.

Oli*_*lie 0

大多数情况下,EXC_BAD_ACCESS这是由于向已释放的对象发送消息而导致的。虽然这在 ARC 下比以前更难做到,但仍然是可能的。

KERN_INVALID_ADDRESS部分只是告诉您,您尝试访问的内存不是应用程序内存空间的一部分,这为释放对象句柄假设提供了证据。

要调试以前发布的对象(称为“Zombie”对象),请在调试器中打开 NSZombies。在 XCode 7 中...

  • CMD-SHIFT- 调出管理方案。
  • 选择您的方案
  • 选择Diagnostics
  • 查看Enable Zombie Objects

注意:您只想在调试版本上执行此操作,因为僵尸对象会占用大量内存并损害整体性能。尽管如此,它仍然是一个出色的调试工具。