我需要一些遺留的數據發送到服務器我的應用程序啓動時,所以在當字符串太大時,主線程(?)中運行的NSLog會阻塞主線程?
applicationDidFinishLaunching
我叫其將一些核心數據實體JSON文本,並將其發送到服務器的方法。有時,應用程序崩潰的原因是:
XXXXXX未能及時推出
我首先想到的是,我做的事情,當應用程序被啓動,主線程,然後我意識到這可能阻斷不是問題,因爲我使用NSURLConnection來發送異步數據,並且不應該阻塞主線程,經過一些測試後,我發現當數據很大時,應用程序更容易崩潰,因爲連接是異步的,唯一可疑的代碼是當我從Core Data實體創建JSON文本時,我使用NSLog來打印它,並且我嘗試使用硬編碼的大json文件,它總是崩潰,如果我註釋掉NSLog lin e,它不會崩潰。
根據該方案,我想知道:
- 我在想,是的NSLog在主線程上運行,無論在哪個線程它叫什麼名字?然後,我在蘋果的文檔中發現:從NSLogv
輸出序列化,在這個過程只有一個線程可以執行上述在同一時間說明的寫/記錄。所有嘗試在下一個線程寫入/記錄消息完成之前都可以開始嘗試。
這是否意味着即使它在非主線程中,但它記錄了一些長字符串,這導致主線程被阻塞?
- NSLog的字符串大小是否有任何限制(理論上,實際上)?硬編碼的JSON文件是150KB。
非常感謝!
樂器說了什麼? –
當我重現這個並運行它的調試模式,XCode凍結和光標變成彩虹微調,我必須'強制'XCode。 – hzxu
爲什麼你試圖登錄150KB?這完全荒謬。 –