【问题标题】:Memory issue with large NSData大型 NSData 的内存问题
【发布时间】:2013-08-06 08:51:03
【问题描述】:

我在主线程上将一个非常大的文件读入内存(不仅仅是简单的dataWithContentsOfFile: 方法,我还在做一些数据操作),我的应用程序崩溃了。在我将此进程移至后台线程后,该应用程序不再崩溃。唯一发生的事情是我得到的NSDatanil

是否有可能只有我的后台线程被中断而不影响主线程,或者我错过了什么?另外,我可以指望这种行为并在NSDatanil 时显示错误消息,而不会导致应用程序崩溃吗?提前谢谢你。

编辑:

我得到的日志是:

malloc: * mmap(size=629800960) 失败(错误代码=12) 错误:无法分配区域 ** 在 malloc_error_break 中设置断点进行调试

我使用的文件大小约为 250 MB。

我知道它为什么在主线程上崩溃了。我的问题是,为什么它没有在辅助线程上崩溃?

【问题讨论】:

  • 崩溃时的错误信息是什么?文件有多大?您使用的代码是什么?如果没有这些信息,任何人说的任何话都只是纯粹的猜测。
  • 你能分享一些代码吗?

标签: ios objective-c nsthread


【解决方案1】:

我想这可能取决于崩溃,但如果是内存不足的问题(你可能使用了太多的内存或创建了太多的对象),它将导致整个应用程序崩溃。

您应该尝试使用较小的文件来测试应用程序,看看它的行为如何。

【讨论】:

  • 或者也许采用替代技术“将所有文件读入内存”?
  • 这一定是内存问题,因为它适用于较小的文件。我还用 Instruments 进行了检查,崩溃出现在 iPad 2 上分配的大约 300 MB(当我在主线程上读取文件时)。
  • 是的,特洛伊木马是对的。在这种情况下,您最好逐位读取文件。检查 NSInputStream:developer.apple.com/library/mac/#documentation/Cocoa/Reference/…
猜你喜欢
  • 1970-01-01
  • 2010-11-18
  • 2014-08-16
  • 1970-01-01
  • 1970-01-01
  • 2014-02-10
  • 1970-01-01
  • 1970-01-01
  • 2021-07-03
相关资源
最近更新 更多