2011-03-18 80 views
1

我想閱讀一個文本文件並對該數據執行一些操作。閱讀長長文件

文件大小爲67 mb

我怎麼讀。

文件爲文本格式。

其工作在模擬器但在設備和崩潰給予內存警告。

代碼

NSString *content = [[[NSString alloc] initWithContentsOfFile:fileName usedEncoding:nil error:nil] autorelease]; 

崩潰,當這句話完整。

感謝,

希亞姆帕爾馬

+1

你可能給我們一些額外的信息,你正在做什麼與文本呢?所以我們知道如何解決這個問題。如果你需要那裏的所有數據,那麼你最終可能會以67MB,但以另一種格式。但是,如果它像XML或JSON文件一樣,則處理起來要容易得多。 – 2011-03-21 08:28:44

+0

它是簡單的文本文件.. – GameLoading 2011-03-24 10:58:55

回答

2

快點,試試彼得建議的。問題是一次加載它,因爲你有大約20 MB可用於你自己的應用程序,我相信。如果你使用的是NSInputStream,你可以分片加載,因此你不會一次填滿整個內存。另請閱讀這個答案的另一個問題:Objective-C: Reading a file line by line

+0

我有一個70 MB的文件,使用此代碼來讀取文件並不能幫助我它線性增加內存。誰能幫我? – GameLoading 2011-03-21 06:21:14

+0

謝謝老兄我做了這個.... :) – GameLoading 2011-03-21 09:59:45

1

你開始讀從- (void) viewDidLoad文件?這可能是問題所在。試着開始讀它在不同的線程,如:[self performSelectorInBackground:@selector(method) withObject:nil];

+0

它在另一個類 – GameLoading 2011-03-18 13:27:41

+0

而你不從viewDidLoad初始化那個類?我問的原因是我有類似的問題,並且由於默認加載時發生超時而導致崩潰。你想讀什麼樣的文字?不可能將文本文件分成幾個文件? – Mikael 2011-03-18 13:31:57

+0

崩潰很可能是因爲它試圖在內存中一次加載67兆字節,這給出了巨大的內存錯誤。如果你在後臺執行它,你仍然會得到這個錯誤;) – 2011-03-21 13:59:00

3

你還沒有定的代碼,但如果您使用stringWithContentsOfFile獲得整個文件考慮使用NSInputStream或標準輸入輸出,以閱讀和處理以上的增量顯示。

+0

它崩潰...... – GameLoading 2011-03-18 13:37:50

+0

像彼得說的...發表一些代碼。現在它可以是任何東西。 – Mikael 2011-03-18 13:41:20

+0

它不在主線程中工作它如何在另一個線程上工作? – GameLoading 2011-03-18 13:43:10