iOS 9崩溃在_prepareForCAFlush与EXC_BAD_ACCESS KERN_INVALID_ADDRESS

随着iOS 9的发布,我们看到了一些崩溃报告,这些报告显示了iOS 9中苹果方面的一个bug。这种情况发生在各种设备types(iPhone,iPad和iPod)上。 我正在寻找为什么这可能会发生,如果有什么我可以做的,以解决它。 这个堆栈正在通过我们的崩溃报告系统(Crashlytics)报告,所以不幸的是我没有可重复的步骤或代码,但我会尽我所能地尽力回答任何问题。 堆栈如下:

Thread : Crashed: com.apple.main-thread 0 libobjc.A.dylib 0x34a27ad6 objc_msgSend + 21 1 CoreFoundation 0x230d3db9 -[__NSArrayM dealloc] + 148 2 libobjc.A.dylib 0x34a34f67 objc_object::sidetable_release(bool) + 150 3 libobjc.A.dylib 0x34a353a9 (anonymous namespace)::AutoreleasePoolPage::pop(void*) + 388 4 CoreFoundation 0x230cbfa9 _CFAutoreleasePoolPop + 16 5 UIKit 0x27523cd9 _prepareForCAFlush + 312 6 UIKit 0x2752886b _beforeCACommitHandler + 10 7 CoreFoundation 0x2317a509 __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 20 8 CoreFoundation 0x2317880d __CFRunLoopDoObservers + 280 9 CoreFoundation 0x23178c3f __CFRunLoopRun + 958 10 CoreFoundation 0x230cc249 CFRunLoopRunSpecific + 520 11 CoreFoundation 0x230cc035 CFRunLoopRunInMode + 108 12 GraphicsServices 0x2c182ad1 GSEventRunModal + 160 13 UIKit 0x272e18a9 UIApplicationMain + 144 14 APPNAMEHERE 0x000ec967 main (main.m:14) 

我们遇到了类似堆栈跟踪的崩溃,经过漫长的调查,我们发现它与另一个崩溃有关; 修复这也解决了这个问题,但我仍然不确定这两个崩溃是如何相关的。

这里是关于其他崩溃的细节:

我们有一个像我们的方法之一的函数调用

 AudioServicesAddSystemSoundCompletion(self.soundID, [[NSRunLoop currentRunLoop] getCFRunLoop], kCFRunLoopDefaultMode, AudioServicesSystemSoundCompletion, (void *)CFBridgingRetain(self)); 

AudioServicesSystemSoundCompletion看起来像

 void AudioServicesSystemSoundCompletion(SystemSoundID ssID, void *clientData) { AudioServicesRemoveSystemSoundCompletion(ssID); CFRelease(clientData); } 

同时执行该函数两次或更多次同时导致应用程序崩溃。 我们通过传递NULL来代替(void *)CFBridgingRetain(self)并移除CFRelease(clientData)来解决这个问题。 线。

由于此修复程序,我们不再看到'_prepareForCAFlush'崩溃了。

还要注意的是,根据Crashlytics的说法,这款设备在每次崩溃重现的时候都有非常高的内存使用率。

希望这可以帮助!

对于我来说,问题是当应用程序被最小化时,我正在显示和解除键盘。

  [self.textView becomeFirstResponder]; [self.textView resignFirstResponder]; 

我在applicationWillResignActive事件上执行了上面的代码。 删除这个代码修复了崩溃。

我也面临这个问题,我想我发现了什么可能导致它。 你们有没有机会使用SDWebImage? 因为这是唯一的地方,我发现CFRunLoopRun()被调用,也有人抱怨: 死线程票 – >应用程序崩溃

似乎只影响设备与32位处理器A5和A6 – iPod的第五代,iPhone 4S / 5 / 5C,iPad 2 /迷你)。 我们这边也没有反馈。 这些崩溃在iOS 9的发布和采用中开始了。 iOS v9.0.1似乎不能解决它。