2013-08-06 56 views
1

我正在主线程(不仅仅是简单的dataWithContentsOfFile:方法,我也在做一些数据操作)读取一个非常大的文件到内存中,我的应用程序崩溃。在将此过程移至后台线程后,该应用程序不再崩溃。唯一发生的是我得到的NSDatanil大型NSData内存问题

是否有可能只有我的后台线程中断而不影响主线程,或者我错过了什么?此外,我可以指望这种行为,只是当NSDatanil,没有应用程序崩溃时显示错误消息?先谢谢你。

编辑:

我得到的日志是:

的malloc:* MMAP(大小= 629800960)失败(错误码= 12) 错误:无法分配区域 * *在malloc_error_break中设置断点以进行调试

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

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

+4

崩溃时的错误信息是什么?文件有多大?你使用的是什么代码?没有这些信息,任何人都会说只是纯粹的猜测。 – borrrden

+0

你能分享一些代码吗? – zahreelay

回答

0

我想它可以依赖于崩溃,但如果它是一个缺乏内存的问题(你可以使用太多的内存或创建太多的对象),它会崩溃整个应用程序。

您应该尝试使用较小的文件测试应用程序并查看其行为。

+0

或者可能使用其他技术来“将所有文件读入内存”? – trojanfoe

+0

它必须是一个内存问题,因为它适用于较小的文件。我还用Instruments检查了它,并且在iPad 2上分配了大约300 MB的崩溃(当我在主线程中读取文件时)。 – Levi

+0

是的,trojanfoe是对的。在这种情况下,您最好按位读取文件。 检查NSInputStream:https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSInputStream_Class/Reference/Reference.html –