2013-08-06 53 views
1

我正在主線程(不僅僅是簡單的dataWithContentsOfFile:方法,我也在做一些數據操作)讀取一個非常大的文件到內存中,我的應用程序崩潰。在將此過程移至後臺線程後,該應用程序不再崩潰。唯一發生的是我得到的NSDatanil大型NSData內存問題

是否有可能只有我的後臺線程中斷而不影響主線程,或者我錯過了什麼?此外,我可以指望這種行爲,只是當NSDatanil,沒有應用程序崩潰時顯示錯誤消息?先謝謝你。

編輯:

我得到的日誌是:

的malloc:* MMAP(大小= 629800960)失敗(錯誤碼= 12) 錯誤:無法分配區域 * *在malloc_error_break中設置斷點以進行調試

我使用的文件大小約爲250 MB。

我知道它爲什麼會在主線程上崩潰。我的問題是,爲什麼它沒有在輔助線程上崩潰?

+4

崩潰時的錯誤信息是什麼?文件有多大?你使用的是什麼代碼?沒有這些信息,任何人都會說只是純粹的猜測。 – borrrden

+0

你能分享一些代碼嗎? – zahreelay

回答

0

我想它可以依賴於崩潰,但如果它是一個缺乏內存的問題(你可以使用太多的內存或創建太多的對象),它會崩潰整個應用程序。

您應該嘗試使用較小的文件測試應用程序並查看其行爲。

+0

或者可能使用其他技術來「將所有文件讀入內存」? – trojanfoe

+0

它必須是一個內存問題,因爲它適用於較小的文件。我還用Instruments檢查了它,並且在iPad 2上分配了大約300 MB的崩潰(當我在主線程中讀取文件時)。 – Levi

+0

是的,trojanfoe是對的。在這種情況下,您最好按位讀取文件。 檢查NSInputStream:https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSInputStream_Class/Reference/Reference.html –