2013-04-05 92 views
-1

我在等待字符串,我運行循環很多次,應用程序崩潰。它顯示錯誤消息如何奶源錯誤消息是malloc的:* MMAP(大小= 16777216)失敗(錯誤代碼= 12) 錯誤:不能分配區域 設置在malloc_error_break斷點調試 *由於未捕獲異常'NSMallocException'而終止應用程序,原因:'內存不足。我們建議重新啓動應用程序。如果您有未保存的文檔,請在Finder中創建備份副本,然後嘗試保存。我的代碼是`NSMutableString * str = [NSMutableString stringWithCapacity:100000];如何多次運行循環

int i; 
for(i=0;i<1000000;i++){ 
    [str appendString:@"abcd"]; 

}`

+0

這是一個字符串大約16mb,需要嗎? – 2013-04-05 05:00:32

+0

請看這裏[NSString的最大尺寸限制](http://stackoverflow.com/questions/6482641/what-is-the-maximum-length-of-an-nsstring-object) – 2013-04-05 05:03:24

+1

這很簡單;你使用了所有可用的內存。如果你正在做一些有意義的事情,有辦法爲你的程序獲得一個更大的堆,但看起來你只是在測試一些東西。我不認爲這裏真的有問題;你剛剛發現了你的電腦的侷限性。 – 2013-04-05 05:19:40

回答

4

不知道你正在實際上做什麼的細節,這是很難說。

一般來說,當內存不足時,答案就是使用較少的內存。

對於涉及大量數據的操作,您需要移動到某個通過磁盤緩衝的操作。這可以通過許多方式完成。使用哪一個取決於你試圖做的任何細節。

如果您確實只是將文本附加到緩衝區中,請打開文件描述符(或NSFileHandle)並寫入該文件。