2010-06-23 135 views
8

我刚拿到iPhone SDK 4,我试图离开开发我以前工作的应用程序。所以,我实现了两个 -(void)applicationDidEnterBackground:(UIApplication *)application- (void)applicationWillTerminate:(UIApplication *)application运行模拟器4.0的iPhone应用程序收到Sigkill

当我点击模拟器4.0 home键,它似乎工作没关系。该应用程序调用-(void)applicationDidEnterBackground:(UIApplication *)application并进入后台状态..然后,我然后双击主页按钮以暴露在后台运行的应用程序,并按住它显示减号或退出。当我点击减号,调试器说

程序接收到的信号: “SIGKILL”

除了

- (void)applicationWillTerminate:(UIApplication *)application不会被调用。我是否错过了一些我需要做的工作来在OS4上工作?或者至少有人可以指点我来调试SIGKILL。谢谢。

回答

13

-applicationWillTerminate:仅当您的应用程序在要求退出时处于运行状态时才被调用。如果它已经处于挂起状态(就像你在这里),系统只是发送一个kill信号给应用程序。这发生在用户按下红色减号按钮手动终止应用程序时以及系统决定放弃应用程序以释放前台应用程序的内存时发生。

如果您的应用程序在后台运行(例如播放音乐或运行一些后台任务),并且用户通过按下减号按钮手动终止应用程序,那么您才会真正收到-applicationWillTerminate:消息。因此,您必须保存所有状态/等。在从-applicationDidEnterBackground:返回之前。

+0

感谢您的答复。有道理。不过,我还有另一个问题。当调用-applicationDidEnterBackground:时,我尝试使用NSUserDefaults保存应用程序的状态,但出于某种原因,我的值并非我期望它们在应用程序重新启动时所期望的状态。任何原因为什么这不会在OS4中工作? – NickDK 2010-06-24 03:19:46

+0

Nevermind ...我没有在NSUserdefaults上调用sychronize。 – NickDK 2010-06-24 23:01:36

2

这是可以预料的多任务栏“红色关闭按钮”相当于强制退出Mac OS X上的应用程序。这是记录的行为。苹果希望iOS 4的普通用户简单地启动/使用/ dimiss应用程序,他们不需要考虑终止进程或任何事情。系统将管理它。

只要确保在应用程序中保存任何重要数据:willResignActive:或applicationWillEnterBackground。因为在此之后,当内存压力迫使系统清理时,可能会导致死亡...... Snow Leopard针对在Info.plist中使用NSSupportsSuddenTermination键的应用程序引入了类似的行为。一个应用程序基本上告诉系统它周期性地保存它的数据,所以当它在后台进行时,没有什么可以做或很少。不像大整体应用程序桌面应用程序...

相关问题