当调用UIApplicationWillEnterForeground时,状态可以保证恢复

时间:2018-04-02 00:52:03

标签: swift swift4

library(TTR) data <- rep(1:3,2) cumsum <- cumsum(data) runSum <- runSum(data, n = 3) DesiredResult <- ifelse(is.na(runSum),cumsum,runSum) 通知被调用时,我的应用程序状态是否可以保证恢复?

换句话说,如果我将一个私有布尔字段设置为true,那么当我从UIApplicationWillEnterForeground通知方法处理程序在从后台转换到前台时检查它的值时,该变量是否仍然为真?

2 个答案:

答案 0 :(得分:1)

不,当应用程序进入后台时,它仍会保留在内存中,但是如果内存不足,iOS会开始释放这些已暂停的应用程序,以便为必须加载的应用程序腾出空间。因此,基本上如果您想确保没有数据丢失,您必须将应用程序数据和设置保存在:

func applicationDidEnterBackground(_ application: UIApplication) {

}
func applicationWillTerminate(_ application: UIApplication) {

}

答案 1 :(得分:1)

如果您被告知您的应用被暂停,(通过致电applicationWillResignActive),您应该保存您的应用状态。您的应用程序可能会在仍在内存中时再次激活,或者可能会被终止。如果再次重新激活,则所有应用的变量仍会保留其先前的值。如果没有,您将“冷”启动,您将需要恢复已保存的状态。

当您被告知要切换到非活动状态时,您无法知道是否会重新激活或终止。因此,您的问题的答案是。你可能会被杀死而不会重新激活。

编辑:

Apple的文档说:

  

处理停用

     

当前景应用程序移动到后台时,UIKit首先调用   applicationWillResignActive:方法来停用应用程序。什么时候   如果发生停用,请执行以下操作。

     
      
  • 将用户数据保存到磁盘并关闭所有打开的文件。始终保存用户   您的应用需要终止时的数据。如果是关闭文件   用户锁定设备。

  •   
  • 只对保留用户数据至关重要。暂停   调度队列和操作队列,不安排任何新任务   执行。

  •   
  • 使任何有效的计时器无效。

  •