随着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的设备,每次崩溃都重现了非常高的内存使用量.
希望这可以帮助!