这是一个关于app进入后台时iOS内存管理的问题。如果我在AppDelegate中有一个带有值的var:
@interface MyAppDelegate : NSObject {
NSString *userName;
}
// In some place
((MyAppDelegate*)[UIApplication sharedApplication] delegate]).userName = @"StackOverflow"我的问题是:当应用程序进入后台时,因为用户收到呼叫或打开另一个应用程序,iOS是否会出于任何原因释放内存(即销毁我的AppDelegate实例)?所以我失去了userName的价值
在Android编程中,我们必须使用Parcelable这样的持久性机制,使用onSaveInstance等生命周期方法,但是在iOS中,我们不需要为"iOS垃圾收集“管理var的值?
关于String变量,答案可能是微不足道的,但是当我在AppDelegate中存储一个UIImages的大Array时会发生什么呢?当应用程序在后台进入时,它永远不会被释放?
抱歉,我的英语很差,我找不到有关生命周期iOS、appDelegate和内存管理的信息。
发布于 2015-02-15 06:22:09
你永远不会真正知道。iOS可能需要将应用程序从内存中删除,才能将其用于其他用途。如果用户关闭应用程序只有一分钟,那么您可能还好,但应用程序可能会关闭几天,用户可能会做任何其他事情……
所以,你真的应该:
时保存数据
选项1.更安全,因为它还可以保存数据以防崩溃,但它并不总是实用的。通常,尽可能快地保存,如果测试表明您需要这样做,以后再努力让程序运行得更好(比如通过在后台线程上处理和保存到磁盘)。
发布于 2015-02-15 06:22:42
当应用程序启动时,调用UIApplicationMain函数,该函数创建一个单例UIApplication对象。
当您像这样声明一个iVar:NSString *userName;时,您正在创建一个对它的strong引用(缺省情况下是strong)。
回答您的问题:userName将在UIApplication发布时发布,因为UIApplication是单例的,所以在应用程序不被终止之前,它永远不会发布。在许多情况下,应用程序将被终止:
文档:
https://stackoverflow.com/questions/28520867
复制相似问题