为什么';当我进入后台时,是否在短时间内杀死iOS?

为什么';当我进入后台时,是否在短时间内杀死iOS?,ios,ios4,Ios,Ios4,我用最新的iOS 4.x iOS在模拟器上按home按钮。我估计它会在60秒后消失,但打印x已经持续了超过10分钟。在应用程序中没有其他事情发生,它是由Xcode创建的骨架“视图”生成的代码 所以这里的问题是,您通过不让ApplicationIdentinterBackground返回来“保持”运行循环。iOS需要在它返回后进行清理,所以如果不这样做,你基本上是在等待系统杀死你,最终它会自行决定这样做 要证明这一点,请删除“for”循环,并将以下内容添加到应用程序代理的顶部: - (void)a

我用最新的iOS 4.x iOS在模拟器上按home按钮。我估计它会在60秒后消失,但打印x已经持续了超过10分钟。在应用程序中没有其他事情发生,它是由Xcode创建的骨架“视图”生成的代码

所以这里的问题是,您通过不让ApplicationIdentinterBackground返回来“保持”运行循环。iOS需要在它返回后进行清理,所以如果不这样做,你基本上是在等待系统杀死你,最终它会自行决定这样做

要证明这一点,请删除“for”循环,并将以下内容添加到应用程序代理的顶部:

- (void)applicationDidEnterBackground:(UIApplication *)application
{  
   NSLog(@"applicationDidEnterBackground");
   for(int x=0;;)
      {
         NSLog(@"%d",x++);
         sleep(1);
      }
}
。。。然后将其添加到应用程序:didFinishLaunchingWithOptions:

dispatch_source_t __timer1;

由于现在您从ApplicationIdentinterBackground返回,您将获得预期的结果,“ping1”将每秒显示一次,直到您进入后台。

模拟器还是真正的ipod/iphone?模拟器在最小化方面做了一些奇怪的事情,我忘了这是否是一个特殊的奇怪之处,但它可能是。我想我昨晚试过real HW,也得到了同样的结果。嗯,没错,我想拿着它向自己证明,如果我违反了iOS的规则,iOS会杀了我。例如,若我只是坐在那个里,在一个紧密的循环和吸CPU(因此电池)。我希望它会杀死我,因为我对系统不好。事实上,你正在测试一个“边缘案例”,看起来你发现了一个bug。在按住ApplicationIdentinterBackground方法12分钟后,我的设备仍然处于活动状态,因此我建议您针对apple提交一个bug(尽管您可能希望首先验证5.0 beda SDK)。好的,我已经在另一个系统上安装了iOS5测试版,所以我今晚将在那里进行测试,看看结果。谢谢。刚刚下载了最新的Xcode4测试版,将iPad1升级到5beta5,并在上面运行了相同的代码,它的工作方式也一样。也让它运行超过12分钟,它不会消失。好的,只是向苹果提交了一份错误报告。让我们看看是否有响应-也许这不是他们的bug。
__timer1 = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, dispatch_get_main_queue());
if (__timer1)
{
    dispatch_source_set_timer(__timer1, dispatch_walltime(NULL, 0), 1ull * NSEC_PER_SEC, 1ull * NSEC_PER_SEC);
    dispatch_source_set_event_handler(__timer1, ^{
        NSLog(@"ping1");
    });
    dispatch_resume(__timer1);
}