2012-11-27 57 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。这可能会帮助你!