这是一个关于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
中时会发生什么一个大Array
的 UIImage
秒?后台进入app永远不会释放?
抱歉我的英语不好,我找不到关于生命周期 iOS、appDelegate 和内存管理的信息。
最佳答案
你永远不知道。 iOS 可能需要从内存中删除该应用程序才能将其用于其他用途。如果用户只关闭应用程序一分钟,那么您可能没问题,但应用程序可能会关闭数天,并且用户可能会做任何其他事情...
所以,你真的应该:
- 每次更改时保存数据,或者
- 当应用程序被告知它将进入后台时保存数据
选项 1. 更安全,因为它还可以保存数据以防崩溃,但它并不总是实用。一般来说,尽快保存,如果测试表明您需要保存,稍后会努力使事情运行得更好(例如通过后台线程处理并保存到磁盘)。
关于当应用程序进入后台时,AppDelegate 上的 IOS Vars 会被释放吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28520867/