【问题标题】:iPhone app running Simulator 4.0 received Sigkill运行 Simulator 4.0 的 iPhone 应用收到 Sigkill
【发布时间】:2010-08-13 19:45:12
【问题描述】:

我刚刚获得了 iPhone SDK 4,我正试图停止开发我之前正在开发的应用程序。所以我同时实现了 -(void)applicationDidEnterBackground:(UIApplication *)application- (void)applicationWillTerminate:(UIApplication *)application

当我在模拟器 4.0 中单击主页按钮时,它似乎工作正常。应用调用-(void)applicationDidEnterBackground:(UIApplication *)application,进入后台状态..

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

程序收到信号:“SIGKILL”

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

【问题讨论】:

    标签: iphone debugging ios4 sigkill


    【解决方案1】:

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

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

    【讨论】:

    • 感谢您的回复。有道理。但是,我也有另一个问题。当 -applicationDidEnterBackground: 被调用时,我尝试使用 NSUserDefaults 保存应用程序的状态,但由于某种原因,一旦应用程序重新启动,我的值并不是我期望的那样。为什么这在 OS4 中不起作用?
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2021-01-11
      • 1970-01-01
      • 1970-01-01
      • 2011-02-25
      • 2020-05-17
      • 1970-01-01
      • 2011-07-04
      • 2019-07-05
      • 1970-01-01
      相关资源
      最近更新 更多