从最近的应用程序栏中删除后,为什么我的程序在重新启动时崩溃?

时间:2011-05-17 16:23:40

标签: iphone objective-c cocoa-touch multitasking

我是一个编程新手,如果这表明我的无知,那就很抱歉......

情况1:

  • 我的程序在模拟器中运行。我按下主页按钮,然后再按我的程序图标,它会回到原来的位置。这很明显 - 它被iPhone的多任务系统冻结了。

情况2:

  • 我的程序在模拟器中运行。我按下主页按钮,但这次我双击程序并从recent-apps栏中删除它。然后我按下程序的图标再次启动它。

在情境2中,我希望我的程序只是从头开始加载,而是在崩溃之前返回到它被“冻结”的页面。

为什么会这样?

编辑 - 这是崩溃的回溯。我已经完成了我的应用程序的完全干净安装,没有数据,从你看到的第一个屏幕,将变量保持在最低限度:

#0  0x96dc009a in mach_msg_trap ()
#1  0x96dc0807 in mach_msg ()
#2  0x0111cd86 in __CFRunLoopServiceMachPort ()
#3  0x01079e74 in __CFRunLoopRun ()
#4  0x01079840 in CFRunLoopRunSpecific ()
#5  0x01079761 in CFRunLoopRunInMode ()
#6  0x01c821c4 in GSEventRunModal ()
#7  0x01c82289 in GSEventRun ()
#8  0x001c4c93 in UIApplicationMain ()
#9  0x00002429 in main (argc=1, argv=0xbffff050) at main.m:14

4 个答案:

答案 0 :(得分:5)

从评论中复制,因为这个理论似乎是正确的:你是否在运行Xcode调试器?可能是当您终止应用程序时,调试器会阻止进程被完全销毁,从而导致后续启动时崩溃。如果您最初从模拟器而不是通过Xcode的调试器启动应用程序,它显然可以正常工作。

答案 1 :(得分:1)

当您的应用从App Switcher终止时,它会调用您的应用代理的applicationDidEnterBackground:(UIApplication *)application方法。在这里,您应该保存所有应用程序状态 - 您的应用程序使用的所有内存都将被释放。可能发生的事情是applicationDidEnterBackground:方法中的某些内容崩溃或者对象模型的大规模解除分配导致崩溃。

修改

我只是重读了你的问题,发现它正在崩溃重新启动。抱歉。您还应该检查application:didFinishLaunchingWithOptions:是否有崩溃,因为在您的应用首次启动时会调用该崩溃。虽然你在应用程序关闭之前就看到了最后一个屏幕,但崩溃似乎仍然可能与终止有关。

如何获得回溯:

如果您在模拟器中运行代码并在Xcode中调试并重现此崩溃,您应该能够发现哪条线路崩溃了。当调试器接收崩溃并且gdb打开时(您应该在Xcode中看到(gdb)提示符),键入bt并按Enter以查看崩溃的回溯。将其粘贴在这里。

See the docs of UIApplicationDelegate了解applicationWillTerminate:的更多信息。

答案 2 :(得分:1)

我有同样的问题。由于某种原因,模拟器阻止我们杀死我们正在测试的应用程序。 我为测试做的一件事是创建一个虚拟项目 如果从另一个虚拟项目启动模拟器。 然后我可以在原始项目中打开/关闭/终止测试通知等。

答案 3 :(得分:1)

拔掉手机,是的。调试器GDB是导致此问题的原因。