Memory 当我的iOS游戏进入后台模式时,它是否应该释放内存?

Memory 当我的iOS游戏进入后台模式时,它是否应该释放内存?,memory,ios7,process,background,Memory,Ios7,Process,Background,我想提到几个游戏,展示它们如何进入后台模式: 当它进入后台模式时,似乎根本没有释放任何内存,事实上,我可以打开轻量级应用程序,比如Notes,然后回到游戏中继续玩,没有任何明显的延迟,从用户的角度来看,这对我来说很酷 游戏立即返回到加载屏幕,当它进入后台模式后立即运行时,初始化过程重新开始,就像重新启动游戏一样,有时非常烦人 因此,就我的游戏而言,它的平均内存占用量为25MB(经过一些优化,内存占用会更少),我知道为了在iOS平台上成为一个好邻居而推荐的“释放尽可能多的内存”的东西,但是考虑到当

我想提到几个游戏,展示它们如何进入后台模式:

当它进入后台模式时,似乎根本没有释放任何内存,事实上,我可以打开轻量级应用程序,比如Notes,然后回到游戏中继续玩,没有任何明显的延迟,从用户的角度来看,这对我来说很酷

游戏立即返回到加载屏幕,当它进入后台模式后立即运行时,初始化过程重新开始,就像重新启动游戏一样,有时非常烦人

因此,就我的游戏而言,它的平均内存占用量为25MB(经过一些优化,内存占用会更少),我知道为了在iOS平台上成为一个好邻居而推荐的“释放尽可能多的内存”的东西,但是考虑到当游戏进入背景模式时释放内存可能会导致我的游戏在进入前景模式时出现“恼人的”暂停


进入后台模式时,我应该保存进度并暂停游戏,而不释放任何内存,还是应该在进入前台模式时释放尽可能多的内存并重新加载这些资源,使用相应的加载暂停?

我会在进入后台时保存进度并暂停游戏,而不会释放内存,因为许多人如果需要内存,只需将其从历史记录或“卡片传送带”中删除即可。ios 7强调多任务,所以你不希望他们重启游戏

例如,有人想在玩游戏的时候给某人发短信。他们退出游戏,给某人发短信。但是他们必须再次加载游戏。没有人喜欢这一点。

正如你自己所指出的(举两个使用相反策略的游戏为例),你的问题没有唯一的答案

我认为,在给定的情况下,通过明确定义您希望应用程序支持的用例,可以找到正确的答案

例如,正如您所提到的,一个用例可能是“用户可以切换到轻量级应用程序并返回游戏,而无需不必要的等待”。(UC1)然后,您还应该有一个轻量级应用程序和参考设备的列表,以确保实际满足用例

另一方面,您可能希望支持一个稍微不同的用例:“用户将始终返回到她离开游戏的位置,除非应用程序终止,在这种情况下,应用程序应显示主菜单”。(UC2)

在第一种情况下,不释放可能是最好的办法;在第二种情况下,您可能希望在用户执行另一项任务(轻量任务或非轻量任务)时将应用程序终止的可能性降至最低,这样,即使她必须等待所有资源加载,她也可以回到离开的地方

甚至在某些情况下,中间方法最好,只释放一部分内存,以达到平衡

当然,如果你的应用程序内存占用太大,在大多数设备上切换到另一个应用程序后,几乎会立即终止,那么第一个用例(UC1)就没有意义了。在这种情况下,释放内存可能更有意义,这样当您返回应用程序时,至少可以节省应用程序加载时间(相对于资源加载时间)


因此,最终,这取决于…

虽然游戏不会占用太多内存,但大多数用户都不会费心关闭应用程序。我建议释放尽可能多的内存,而不将它们发送回“开始”菜单,就像@sergio推荐的“中间”选项一样。

我强烈建议释放内存。我有一部iPhone4,一些应用程序现在占用了太多的持久内存,所以在它们之间切换成了一场噩梦。例如,最近,我无法在Safari和Twitter之间切换,除非它们重新加载所有状态(在两个方向上都需要20秒以上)


一句话:尽量保持重要状态,但内存要尽可能少(即不保留图像/纹理),否则应用程序将在旧设备上关闭,而您将实际上失去更多状态。

保存进度并在加载暂停时释放内存,尤其是当您的游戏是为旧设备运行时。我有一部iPhone4,当游戏在后台运行而没有释放内存时,我的前台应用程序每隔15分钟就会崩溃一次。但是如果你有诸如“车辆/武器升级在x分钟内完成”之类的事情,你需要保存游戏进度并释放内存,因此只有升级计时器在运行。如果您进行了足够的优化,您可能会减少内存占用,因此我建议您在编码时记住这些优化,这样背景性能将是您的最小问题。

我同意您的看法,但只有当应用程序不是游戏时,游戏才是需要特殊指导的特殊情况,或者至少在每场比赛中值得考虑。