【问题标题】:a long long file reading很长很长的文件阅读
【发布时间】:2011-07-18 03:53:34
【问题描述】:

我想读取一个文本文件并对该数据执行一些操作。

文件大小为 67 mb

我怎么读。

文件为文本格式。

它在模拟器中工作,但在设备和崩溃中发出内存警告。

代码是

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

当这句话完成时崩溃。

谢谢,

夏姆帕尔玛

【问题讨论】:

  • 你能不能给我们一些关于你对文本做了什么的额外信息?所以我们知道如何解决这个问题。如果您需要其中的所有数据,您可能仍会得到 67MB,但采用另一种格式。但是,如果它是 XML 或 JSON 文件,则处理起来会容易得多。

标签: iphone objective-c xcode ipad nsfilemanager


【解决方案1】:

您尚未提供代码,但如果您使用 stringWithContentsOfFile 获取整个文件,请考虑使用 NSInputStream 或 stdio 来读取它并以增量方式处理或显示它。

【讨论】:

  • 就像彼得说的...发布一些代码。现在它可以是任何东西。
  • 它在主线程中不工作如何在另一个线程上工作?
  • 您是否尝试过读取小得多的文件以进行测试?
  • 是的,它在删除一些内容后适用于同一个文件
【解决方案2】:

Fasttracks,试试 Peter 的建议。我相信,问题在于一次全部加载,因为您有大约 20 MB 可用于您自己的应用程序。如果您使用 NSInputStream,您可以分段加载它,因此您不会一次填满整个内存。另请阅读另一个问题的答案:Objective-C: Reading a file line by line

【讨论】:

  • 我有一个 70 mb 的文件,使用此代码读取文件对我没有帮助,它会线性增加内存。谁能帮帮我?
【解决方案3】:

您是否开始从- (void) viewDidLoad 读取文件?这可能是问题所在。尝试在不同的线程中开始阅读它,例如:[self performSelectorInBackground:@selector(method) withObject:nil];

【讨论】:

  • 你没有从 viewDidLoad 初始化那个类?我问的原因是我遇到了类似的问题,并且在加载默认值时由于超时而崩溃。你想读什么样的文字?不能把文本文件分成几个文件吗?
  • 崩溃可能是因为它试图一次在内存中加载 67 兆字节,这会产生巨大的内存错误。如果您在后台执行它,您仍然会收到此错误;)
  • @Erik,是的,这就是为什么我建议将文本文件分成几个文件:)
  • 是的,我猜 :) 我主要是想对你的主要答案做出反应;)
猜你喜欢
  • 2013-03-28
  • 1970-01-01
  • 1970-01-01
  • 2014-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多