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問題?
謝謝大家,
最大
相關,也許? http://stackoverflow.com/questions/12901031/segv-accerr-calling-nsnotificationcenter-defaultcenter-removeobserverself-i – CodaFi
@CodaFi不是真的,因爲這個方法恰好在所有用戶對象被釋放後被調用。 –
如果您將CFR作爲測試保留該線程會發生什麼情況? –