【问题标题】:Why does closing the simulator make my app receive SIGTERM when my app is in the background?当我的应用程序在后台时,为什么关闭模拟器会使我的应用程序收到 SIGTERM?
【发布时间】:2011-10-02 13:36:35
【问题描述】:

当我得到这个时:

- (void)applicationWillResignActive:(UIApplication *)application {

我释放了我所有的对象并使我的所有计时器失效。

当我得到这个时:

 - (void)applicationDidBecomeActive:(UIApplication *)application {

我重新分配了所有对象并让我的计时器再次运行。

一切都很好,除了现在如果我把我的程序放到后台,然后我实际上通过关闭 IOS 模拟器来终止程序,它会在行给出一个 SIGTERM 信号:

int retVal = UIApplicationMain(argc, argv, nil, nil);

另一方面,如果我通过关闭 IOS 模拟器来终止程序而不先将其放入后台,它不会发出 SIGTERM 信号。

我做错了吗?


对我来说,这类 SIGTERM 的主要原因如下。如果我在终止程序之前释放了我从未拥有或已经释放的任何对象,那么当我终止程序时我会得到那个 SIGTERM。

我不知道如何从模拟器或调试器中获取有关我对哪个对象执行此操作的信息。但是从 SIGTERM 得知我做了一个无关的发布,这足以让我通过检查来追捕它。

如果有人知道如何查找在 xcode 中被额外释放的对象,请加入。

【问题讨论】:

    标签: objective-c ios cocoa-touch memory-management


    【解决方案1】:

    你没有做错任何事。当您关闭 iOS 模拟器时,它会通过发送 SIGTERM 来终止您的应用程序。时期。这就是它的工作方式。如果您将应用程序留在前台,它仍然会被杀死,只是不会被SIGTERM 杀死。当你的应用在后台时,它仍然连接到模拟器;如果没有模拟器,它就无法继续存在,并且如果您启动一个模拟器,它就无法连接到模拟器的另一个实例。

    如果您不希望您的应用收到SIGTERM,请不要关闭模拟器。

    【讨论】:

      猜你喜欢
      • 2015-03-17
      • 1970-01-01
      • 2019-04-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多