当我的iOS游戏进入后台模式时,它应该可以释放内存吗?

rra*_*lvv 5 memory background process ios7

我想提及几个游戏,以展示他们如何处理进入后台模式:

种族冲突.当它进入后台模式时似乎根本不释放任何内存,实际上我可以打开像Notes这样的轻量级应用程序并回到游戏继续播放而没有任何明显的延迟,从用户的角度来看这对我来说似乎很酷.

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

因此,就我的游戏而言,它的平均内存占用量为25 MB(并且通过一些优化会减少),我知道"尽可能多地释放内存"这些东西是为了成为一个好东西iOS平台上的邻居,但考虑到当游戏进入后台模式时释放内存可能会导致我的游戏在进入前台模式时出现"烦人"暂停...

... 我应该在进入后台模式时保存进度并暂停游戏而不释放任何内存,或者我应该释放尽可能多的内存并在进入前台模式时再次加载这些资源,并分别加载暂停?

ser*_*gio 2

正如您自己指出的那样(通过给出两个使用相反策略的游戏作为例子),您的问题没有唯一的答案。

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

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

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

对于第一种情况,不释放可能是最好的方法;在第二种情况下,您可能希望在用户执行另一项任务(轻量级或非轻量级)时最大程度地减少应用程序终止的机会,以便她可以返回到她离开的地方,即使她必须等待所有任务要加载的资源。

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

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

所以,最终,这取决于...