我的iPad应用程序可以导致设备重启吗?

时间:2011-07-26 00:30:09

标签: iphone objective-c cocoa-touch ipad

我有一个iPad应用程序,它有一个下载大量地图文件的过程(一些数据和几十万个文件)。

在我最近的测试版中,设备有时会在下载过程中重启(下载可能需要几个小时)。

当应用重新启动时,它不会留下崩溃报告。我们在运行4.3.3的iPad 1和iPad 2上都观察到了这种行为。

我唯一能想到的是我们将最大并发线程数从4增加到20来进行这些下载。

3 个答案:

答案 0 :(得分:6)

完全耗尽系统内存会触发设备的硬重启。这曾经在iPhone OS 2.0中更常见,在最初的iPhone和iPod touch的有限硬件上运行。在最近的操作系统版本中,当应用程序超出内存上限时,Apple会更严格地强制执行应用程序的硬件杀戮,因此执行此操作变得更加困难。此外,这些设备的内存比以往多得多。

有时可以这样做的一种方法是加载许多大型纹理或其他图形组件,这些组件可能无法立即识别为应用程序使用的内存。在紧密循环中将一堆数据加载到GPU上时,我已经能够重新启动系统。你可能会遇到类似的东西。

我怀疑这与您的活动线程数量有关,尽管它们可能会让您在系统杀死应用程序之前将更多数据转储到内存中。

顺便说一句,您是否考虑过使用GCD或基于队列的框架(如ASIHTTPRequest)而不是拥有大量消耗资源的线程?这些可能对您的应用程序更有效,但仍然提供您所需的并发性。

答案 1 :(得分:0)

您的应用最有可能因内存管理而崩溃。由于您正在下载几GB的数据,可能您的磁盘空间不足?我不确定为什么你的设备需要几个小时才能重启。

尝试发布一些代码。

答案 2 :(得分:0)

您是否在仪器中进行了调试?这将显示分配是否正在上升并填充内存。如果您尝试将这些GB加载到内存中,那么您当然会遇到崩溃。

另外,你看过dispatch_apply而不是线程吗? GCD根据负载自动分配和增加/减少它使用的线程。这样您就不必自己管理。这可能值得一试。