2013-04-12 44 views
3

我們有一個嚴重的崩潰的錯誤,我們可以絕對不能持有。問題在於它發生在後臺異步發生,很明顯當調度系統清理了一個工作線程時。這裏有兩個例子堆棧跟蹤:崩潰在__CFTSDFinalize

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問題?

謝謝大家,
最大

+0

相關,也許? http://stackoverflow.com/questions/12901031/segv-accerr-calling-nsnotificationcenter-defaultcenter-removeobserverself-i – CodaFi

+0

@CodaFi不是真的,因爲這個方法恰好在所有用戶對象被釋放後被調用。 –

+0

如果您將CFR作爲測試保留該線程會發生什麼情況? –

回答

0

一個神祕的,因爲它是,這個問題似乎已經消失,因爲iOS的7,它也因爲在Xcode 4.6.3編譯消失。所以無論是(或兩者)這些似乎已經修復了這個錯誤。