_CFAutoreleasePoolPop 崩溃

Posted

技术标签:

【中文标题】_CFAutoreleasePoolPop 崩溃【英文标题】:Crash at _CFAutoreleasePoolPop 【发布时间】:2015-10-29 15:19:38 【问题描述】:

我收到了来自Fabric 的崩溃,堆栈如下:

Thread : Crashed: com.apple.main-thread
0  libobjc.A.dylib                6806634868 objc_release + 20
1  libsystem_blocks.dylib         6813456656 _Block_release + 256
2  libobjc.A.dylib                6806640420 (anonymous namespace)::AutoreleasePoolPage::pop(void*) + 564
3  CoreFoundation                 6529519172 _CFAutoreleasePoolPop + 28
4  UIKit                          6605817924 _wrapRunLoopWithAutoreleasePoolHandler + 76
5  CoreFoundation                 6530394704 __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 32
6  CoreFoundation                 6530382300 __CFRunLoopDoObservers + 360
7  CoreFoundation                 6530383292 __CFRunLoopRun + 836
8  CoreFoundation                 6529519780 CFRunLoopRunSpecific + 396
9  GraphicsServices               6682260900 GSEventRunModal + 168
10 UIKit                          6606283712 UIApplicationMain + 1488
11 Spec                           4297532060 main (main.m:15)
12 libdyld.dylib                  6813280776 start + 4

我不知道为什么在(anonymous namespace)::AutoreleasePoolPage::pop(void*) 之后会是_Block_release。是否有可能将块添加到 autoreleasepool?如果可能,为什么该块在释放时崩溃而在调用时没有崩溃?

【问题讨论】:

尝试使用僵尸调试 @newacct 我们不知道这个错误何时以及为什么会发生。所以我无法通过使用僵尸的 Xcode 来调试它。 【参考方案1】:

好的,我已经解决了这个错误。崩溃的原因是我为 NSMutableArray 挂钩了函数objectAtIndex。如果用户从后台切换,应用程序会崩溃-[UIKeyboardLayoutStar release]: message sent to deallocated

因此删除钩子代码将解决此错误。

【讨论】:

你可以有另一个解决方案。将您的文件设置在您挂钩NSMutableArray 方法编译器标志为-fno-objc-arc 的位置。然后重建你的项目。您可以确认问题。

以上是关于_CFAutoreleasePoolPop 崩溃的主要内容,如果未能解决你的问题,请参考以下文章

SIGABRT 在 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ 上崩溃

pickerview didSelect 随机崩溃:__cfrunloop_is_calling_out_to_a_source1_perform1_function

[WTL/ATL]_[初级]_[关于窗口子类析构时崩溃的原因]

使用_mm_load_pd时函数崩溃

android开发之应用Crash自动抓取Log_自动保存崩溃日志到本地

在iOS 11上出现libsystem_kernel.dylib`__abort_with_payload崩溃问题的解决