- (void)applicationDidEnterBackground:(UIApplication *)application
{
NSLog(@"applicationDidEnterBackground");
for(int x=0;;)
{
NSLog(@"%d",x++);
sleep(1);
}
}
我在最新iOS 4.x iOS的模拟器上按主页按钮。我认为它会在60秒之后被杀掉,但它已经持续超过10分钟打印x。应用程序中没有其他任何内容,它的骨架“视图”生成的代码由Xcode创建。
答案 0 :(得分:1)
所以这里的问题是你通过不让applicationDidEnterBackground返回来“保持”运行循环。 iOS需要在返回之后进行清理,所以如果不这样做,你实际上是在等待系统杀死你,它最终会自行决定。
要证明这一点,请删除“for”循环并将以下内容添加到应用代理的顶部:
dispatch_source_t __timer1;
...然后将其添加到您的应用程序:didFinishLaunchingWithOptions:
__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);
}
因为现在你从applicationDidEnterBackground返回,你将获得预期的结果,“ping1”将每秒显示,直到你进入后台。