2013-01-07 74 views
0

我正在開發一個靜態庫。 我在庫中使用反向驗證,使用源代碼here。 在這個庫中,iOS5中出現以下崩潰,但在iOS6中正常工作。iOS5中的GCD崩潰

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0) 

如果我們改變了行,如下所示,它在所有操作系統版本工作正常。

dispatch_async(dispatch_get_main_queue() 

這種改變是否會在所有情況下都起作用或者會產生什麼問題? 請指教,謝謝。

+0

你會得到什麼錯誤?崩潰日誌? – mprivat

+0

謝謝你的回覆@mprivat。它在iOS 5模擬器中引發「objc_msgSend」,我沒有iOS 5設備,但它在iOS 6設備中工作正常。 –

+1

我有同樣的問題,但是很愚蠢。我已將我的應用的部署目標設置爲6.0。把它改回5.0可以讓我保持相同的「dispatch_async」代碼行,並且可以在兩個操作系統上運行。 –

回答

2

看不到代碼很難分辨,但這聽起來像是你發送的消息沒有你的GCD塊到塊之前創建的對象,並且在塊執行時不再有效。我建議設置一個屬性來保留它,以便ARC不收集它。

iOS版本之間的差異可能是由於模擬器和設備之間的差異(你說你在設備上運行iOS 6版本,在模擬器上運行5版本)。

+0

非常感謝你@mprivat,我會發布源代碼。 –

相關問題