当我的应用程序在后台时,为什么关闭模拟器会让我的应用程序收到SIGTERM?

Joe*_*e C 1 cocoa-touch memory-management objective-c ios

当我得到这个:

- (void)applicationWillResignActive:(UIApplication *)application {
Run Code Online (Sandbox Code Playgroud)

我释放所有对象并使我的所有计时器无效.

当我得到这个:

 - (void)applicationDidBecomeActive:(UIApplication *)application {
Run Code Online (Sandbox Code Playgroud)

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

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

int retVal = UIApplicationMain(argc, argv, nil, nil);
Run Code Online (Sandbox Code Playgroud)

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

难道我做错了什么?


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

我不知道如何从模拟器或调试器获取有关我执行此操作的对象的信息.但是从SIGTERM知道我做了一次无关的释放已足以让我通过检查来追捕它.

如果有人知道如何查找哪些对象已在xcode中被释放,请加入.

rob*_*off 5

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

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