运行模拟器4.0的iPhone应用收到了Sigkill

时间:2010-06-23 03:09:46

标签: iphone debugging ios4 sigkill

我刚刚获得了iPhone SDK 4,而我正试图开发我以前正在开发的应用程序。所以我实施了两个 -(void)applicationDidEnterBackground:(UIApplication *)application- (void)applicationWillTerminate:(UIApplication *)application

当我点击模拟器4.0中的主页按钮时,它似乎工作正常。该应用程序调用{​​{1}}并进入后台状态..

然而,我然后双击主页按钮以显示在后台运行的应用程序,并按住它以显示减号或退出。当我点击减号时,调试器会显示

  

收到信号:“SIGKILL”

此外,永远不会调用-(void)applicationDidEnterBackground:(UIApplication *)application。我错过了我需要做的事情才能在OS4上工作吗?或者至少可以有人指出我调试SIGKILL的方法。谢谢。

2 个答案:

答案 0 :(得分:13)

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

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

答案 1 :(得分:2)

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

确保在应用程序中保存所有重要数据:willResignActive:或applicationWillEnterBackground。因为在此之后,当内存压力迫使系统清理时你可能会被杀死... Snow Leopard为在Info.plist中使用NSSupportsSuddenTermination键的应用程序引入了类似的行为。一个应用程序基本上告诉系统它会定期一点一点地保存它的数据,这样当它进入后台时,没有什么可做的或者很少。与大型单片应用程序桌面应用程序不同......