iOS 9崩溃_prepareForCAFlush与EXC_BAD_ACCESS KERN_INVALID_ADDRESS

前端之家收集整理的这篇文章主要介绍了iOS 9崩溃_prepareForCAFlush与EXC_BAD_ACCESS KERN_INVALID_ADDRESS前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
随着iOS 9的发布,我们看到几个崩溃报告,看起来是苹果在iOS 9中的一个错误.这是在设备类型(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的设备,每次崩溃都重现了非常高的内存使用量.

希望这可以帮助!

原文链接:https://www.f2er.com/iOS/336937.html

猜你在找的iOS相关文章