在applicationDidEnterBackground上调度保存操作:

Apple的“应用程序状态和多任务”文档(“移动到后台时要做什么”一节)说当应用程序进入后台时保存:

保存用户数据和应用程序状态信息。 进入后台时,应将所有未保存的更改写入磁盘。 此步骤是必要的,因为您的应用可能会因为各种原因而在后台安静地被杀死。 您可以根据需要从后台线程执行此操作。

当我启动一个调度操作,例如保存,这需要一些时间在applicationDidEnterBackground:如下所示我按下主页按钮时没有得到NSLog输出。 返回应用程序后,将显示NSLog输出。

 - (void)applicationDidEnterBackground:(UIApplication *)application { dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ [self performOperation]; NSLog(@"Operation finished"); }); } 

我可以确定performOperation方法是完全执行还是在app进入睡眠模式时中断?

确保将plist键设置UIApplicationExitsOnSuspend设置为no以确保调用applicationDidEnterBackground

接下来确保您开始一个长时间运行的任务。 在你的情况下,它看起来像这样:

 - (void)applicationDidEnterBackground:(UIApplication *)application { UIBackgroundTaskIdentifier __block bgTask = nil; UIApplication *app = [UIApplication sharedApplication]; bgTask = [app beginBackgroundTaskWithExpirationHandler:^{ [app endBackgroundTask:bgTask]; bgTask = UIBackgroundTaskInvalid; }]; dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ [self performOperation]; NSLog(@"Operation finished"); }); } 

这样你告诉应用程序在你完成时会闲逛10分钟。 在十分钟结束时,将调用到期处理程序。

此外,您可以设置所需的背景模式键以获得更多时间。 有很多黑客和变种,可以让你有更多的时间使用我上面提到的东西。

我将使用不同类型的日志记录,以确保:

灵活的iOS日志记录

通过将此日志记录添加到项目中,无论是否正在调试,都可以通过转至管理器 – >设备 – >“您的设备” – >控制台来检查项目的日志。

我认为这是最好的方式,当我不确定我是否可以调试某些东西时,它对我帮助很大。