在__CFTSDFinalize中崩溃

时间:2013-04-12 16:09:52

标签: ios objective-c crash grand-central-dispatch nsthread

我们有一个严重的崩溃错误,我们绝对无法掌握。问题是它恰好在后台异步发生,显然当调度系统清理工作线程时。以下是两个示例堆栈跟踪:

Thread 7 Crashed:
0   libobjc.A.dylib                     0x3b23b5b0 objc_msgSend + 15
1   Foundation                          0x33c03581 -[NSNotificationCenter postNotificationName:object:userInfo:] + 49
2   Foundation                          0x33cb3367 __NSFinalizeThreadData + 255
3   CoreFoundation                      0x3336cf81 __CFTSDFinalize + 65
4   libsystem_c.dylib                   0x3b68a12b _pthread_tsd_cleanup + 174
5   libsystem_c.dylib                   0x3b689e03 _pthread_exit + 119
6   libsystem_c.dylib                   0x3b68cd02 _pthread_workq_return + 26
7   libsystem_c.dylib                   0x3b68ca16 _pthread_wqthread + 366

Thread 8 Crashed:
0   Foundation                          0x31bfd2e2 __NSFinalizeThreadData + 122
1   CoreFoundation                      0x312b6f81 __CFTSDFinalize + 65
2   libsystem_c.dylib                   0x395d412b _pthread_tsd_cleanup + 174
3   libsystem_c.dylib                   0x395d3e03 _pthread_exit + 119
4   libsystem_c.dylib                   0x395d6d02 _pthread_workq_return + 26
5   libsystem_c.dylib                   0x395d6a16 _pthread_wqthread + 366

所有这些崩溃报告似乎都有相同的原因:

Exception Type:  SIGSEGV
Exception Codes: SEGV_ACCERR at 0x9209ea83

我得到了这个:似乎有NSThreadWillExitNotification被张贴。崩溃日志更常出现而不是 NSNotificationCenter框架(第二个示例)。常规调用只传递@"NSThreadWillExitNotification"NSThread对象,nil userInfo。

我现在能想到的所有问题都是NSThread对象以某种方式被过度释放。我只是检查了所有使用我们制作的NSThread是与主线程的简单等价检查。像这样:

if (NSThread.currentThread == NSThread.mainThread) ...

任何见解?还有一个奇怪的ARC问题吗?

谢谢大家,
最大

1 个答案:

答案 0 :(得分:0)

这是一个神秘的问题,这个问题似乎已经从iOS 7开始消失了。自从编译Xcode 4.6.3以来,它也已经消失了。所以这些中的任何一个(或两个)似乎都修复了这个错误。