2012-11-27 94 views
1

我想從文件分配大量的字符到NSString。我做到了。它在iOS模擬器中工作正常。但在iOS設備上墜毀。我認爲,長度超過了NSString的內存。我可以認識到,NSString限制將隨着不同設備和可用內存的變化而變化。我的問題,是否有其他選擇從文件中獲取字符串並將其存儲在運行時出現內存不足問題? 或如何檢查NSString的可用長度?問題與NSString大小

在這裏我的代碼。我追加在的NSString

Str=[Str stringByAppendingString:TmpStr]; 
+1

爲什麼你需要一次在內存中的整個字符串? –

+0

我們在談論什麼尺碼? – giorashc

+0

呀。我需要使用它在我的應用程序中查找一些計算。 – SARANGA

回答

0

分析的字符串請你分享控制檯日誌時,你的應用程序崩潰? 儘管我認爲這不是真正的問題,但問題卻不同。同時,您可以嘗試使用數據庫進行存儲。 而且,如果可能的話,請顯示您嘗試分配字符串的行。

+0

這就像內存問題。應用程序發生了故障,但沒有控制檯日誌。 – SARANGA

+0

你有沒有激活你的殭屍啓用,試試。可能的情況可能是該字符串得到釋放或可能是其他組件,所以只需檢查。 :) –

+0

此外,根據你的話,在模擬器它工作正常,所以請從那裏你提到的字符串的長度。無論如何,由於一些工作,我不得不讓......但稍後會見到你。 :) –

2

您可能要確認它實際上是內存問題並處理內存不足的情況。看到這個SO張貼關於如何做到這一點: iPhone - How to deal with low memory conditions

如果你想在一次加載書籍內容到一個NSString它可能會遇到內存受限設備的內存不足情況。流允許您一次只讀取文件的一部分,並只將文件的當前部分保存在內存中。即使您可以完全成功加載​​某些書籍,速度也會更慢,但仍會消耗比應用程序所需更多的內存 - 這將使您的應用程序成爲第一個在低內存條件下被標記的應用程序。

結帳Apple's Stream Programming Guide

從該引導:

可可包括三個流相關的類:NSStream,NSInputStream, 和NSOutputStream。 NSStream是一個抽象類,它爲所有流對象定義了基本接口和屬性。 NSInputStream和NSOutputStream是NSStream的子類,並且 實現默認的輸入流和輸出流行爲。您可以爲位於內存中的流數據創建NSOutputStream實例,或者將 寫入文件或C緩衝區;您可以創建NSInputStream實例 以獲取從NSData對象或文件讀取的流數據。

編輯: 在評論中,您澄清了您是從XML加載的。你仍然有同樣的根本問題,你試圖一次將大量的某種「書籍」內容加載到內存中。您在解析xml時附加了tmp字符串,所以效果相同。所以,你必須找到一種方法來逐步加載你需要的書的部分。幸運的是,您可以告訴NSXMLParser使用流。

這可能會幫助: Using NSXMLParser initWithStream: no parser delegate methods received

我也剛剛發現這個SO張貼的話題,可以幫助:Objective-C: Reading a file line by line

不知道關於你的應用程序的細節,但你可以流上升到目前的數據你需要(和任何一方的幾頁),或者你甚至可以在磁盤上的某些臨時文件中將內容流化並分解成「頁面」,作爲「頁面緩存」的排序。

+0

謝謝。但是我沒有將所有字符串一次追加到NSString。實際上我使用NSXMLParser從Xml文件中獲取字符串所以我沒有一次追加所有字符串。 – SARANGA

+0

好的 - 本來很高興知道這個問題:)編輯答案 – bryanmac

+0

我想從本地目錄解析XML文件。我已經從我的網絡服務器下載它。那麼我可以使用這個流媒體概念嗎? – SARANGA

0

使用NSMutableString而不是NSString。這可能會幫助你!