当应用程序进入后台时,AppDelegate 上的 IOS Vars 会被释放吗?

标签 ios memory-management appdelegate

这是一个关于app进入后台时iOS内存管理的问题。 如果我在 AppDelegate 中有一个 var有一个值:

@interface MyAppDelegate : NSObject  {
    NSString *userName;
}

// In some place
((MyAppDelegate*)[UIApplication sharedApplication] delegate]).userName = @"StackOverflow"

我的问题是:当应用程序进入后台时,因为用户接听电话或打开另一个应用程序,iOS 是否可能出于任何原因释放内存(因此破坏我的 AppDelegate 实例)?所以我失去了 userName 的值(value)?

在 Android 中编程我们必须使用像 Parcelable 这样的持久化机制。 , 使用像 onSaveInstance 这样的生命周期方法等等。但是在 iOS 中,我们不必为“iOS 垃圾回收”管理 var 的值?

也许谈论 String 的答案可能很简单var,但是当我存储在 AppDelegate 中时会发生什么一个大ArrayUIImage秒?后台进入app永远不会释放?

抱歉我的英语不好,我找不到关于生命周期 iOS、appDelegate 和内存管理的信息。

最佳答案

你永远不知道。 iOS 可能需要从内存中删除该应用程序才能将其用于其他用途。如果用户只关闭应用程序一分钟,那么您可能没问题,但应用程序可能会关闭数天,并且用户可能会做任何其他事情...

所以,你真的应该:

  1. 每次更改时保存数据,或者
  2. 当应用程序被告知它将进入后台时保存数据

选项 1. 更安全,因为它还可以保存数据以防崩溃,但它并不总是实用。一般来说,尽快保存,如果测试表明您需要保存,稍后会努力使事情运行得更好(例如通过后台线程处理并保存到磁盘)。

关于当应用程序进入后台时,AppDelegate 上的 IOS Vars 会被释放吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28520867/

相关文章:

iphone - 如何在解析后获取xml文件的元素并在iPhone程序中对其进行验证

iPhone 接口(interface)尺寸

ios - 从 App Delegate 打开导航 Controller

ios - 从按钮操作调用 AppDelegate 中的方法时出现错误。

ios - 如何在应用程序委托(delegate)中将选项卡 Controller 设置为根 Controller 而不实例化(重新加载)它?

ios - 向继承的属性添加功能

ios - Core Data中 `many to many`关系中的级联删除规则

python - 大型 numpy 矩阵内存问题

java - 在java中存储二维数组的最小方式

c++ - 内存模块是否映射到进程的虚拟空间?