您可能想确认它实际上是内存问题并处理内存不足的情况。有关如何做到这一点,请参阅此 SO 帖子:
iPhone - 如何处理内存不足的情况
如果您尝试一次将书籍内容加载到 NSString 中,则可能会在内存受限的设备上遇到内存不足的情况。流允许您一次读取文件的一部分,并且仅将文件的当前部分保存在内存中。即使您可以成功地完全加载一些书籍,它也会比应用程序需要的速度更慢并且仍然消耗更多的内存 - 这将使您的应用程序成为第一个在低内存条件下被标记的应用程序。
查看Apple 的 Stream Programming Guide
从该指南:
Cocoa 包含三个与流相关的类:NSStream、NSInputStream 和 NSOutputStream。NSStream 是一个抽象类,它定义了所有流对象的基本接口和属性。NSInputStream 和 NSOutputStream 是 NSStream 的子类,实现默认的输入流和输出流行为。您可以为位于内存中或写入文件或 C 缓冲区的流数据创建 NSOutputStream 实例;您可以为从 NSData 对象或文件读取的流数据创建 NSInputStream 实例。
编辑:在您澄清您正在从 XML 加载的评论中。你仍然有同样的基本问题,你试图一次将某种“书”的大量内容加载到内存中。您在解析 xml 时附加了 tmp 字符串,因此效果是相同的。因此,您必须找到一种方法来逐步加载所需的书籍部分。幸运的是,您可以告诉 NSXMLParser 使用流。
这可能会有所帮助:
使用 NSXMLParser initWithStream: no parser delegate methods received
我也刚刚发现这个可能有帮助的主题的帖子:Objective-C: Reading a file line by line
不确定您的应用程序中的详细信息,但您可以流式传输到您需要的当前数据(以及两侧的几页),或者您甚至可以将内容流式传输并分解为磁盘上某些临时文件中的“页面”作为排序的“页面缓存”。