首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当应用程序进入后台时,AppDelegate上的IOS变量会被释放吗?

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

Stack Overflow用户
提问于 2015-02-15 06:09:57
回答 2查看 601关注 0票数 0

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

代码语言:javascript
复制
@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和内存管理的信息。

EN

回答 2

Stack Overflow用户

发布于 2015-02-15 06:22:09

你永远不会真正知道。iOS可能需要将应用程序从内存中删除,才能将其用于其他用途。如果用户关闭应用程序只有一分钟,那么您可能还好,但应用程序可能会关闭几天,用户可能会做任何其他事情……

所以,你真的应该:

  1. 在每次数据更改时保存数据,或在应用程序被告知将转到后台

时保存数据

选项1.更安全,因为它还可以保存数据以防崩溃,但它并不总是实用的。通常,尽可能快地保存,如果测试表明您需要这样做,以后再努力让程序运行得更好(比如通过在后台线程上处理和保存到磁盘)。

票数 1
EN

Stack Overflow用户

发布于 2015-02-15 06:22:42

当应用程序启动时,调用UIApplicationMain函数,该函数创建一个单例UIApplication对象。

当您像这样声明一个iVar:NSString *userName;时,您正在创建一个对它的strong引用(缺省情况下是strong)。

回答您的问题:userName将在UIApplication发布时发布,因为UIApplication是单例的,所以在应用程序不被终止之前,它永远不会发布。在许多情况下,应用程序将被终止:

  1. the system kill the app (memory,...)

文档:

Memory management

iOS App life cycle

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28520867

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档