iPod Touch 4G,iOS 5上的最大(实用)内存使用

时间:2012-02-27 15:00:55

标签: ios memory-management ios5 ipod-touch

我们有一个内存密集型3D应用程序,主要针对iPad 2和iPhone 4S,但它也适用于iPod Touch 4G和iPhone 3GS。我们发现iPod Touch 4G上较小的内存占用量与视网膜显示屏相结合,使得该平台更容易出现内存不足错误。 iOS5似乎也在某种程度上降低了可用内存。

基于我们正在使用的平台,我们相对容易降低3D模型的分辨率,但我们必须在加载前设置该分辨率,因此我们无法根据内存压力警告动态降低它。 O / S

我们已经根据试验和错误调整了内存使用量,但我们发现长时间(例如几个月)没有重新启动的设备的可用内存比重启的设备要少得多最近。 (即使你杀掉所有正在运行的应用程序。)

我想知道其他iOS应用开发者使用什么作为iPod Touch 4G应用的实际内存限制?

3 个答案:

答案 0 :(得分:3)

虽然保留了每个人都在考虑的所有警告,但我个人的一般经验法则是,在明智的天气里,你可以期待以下几点:

  • 512MB设备 - > 200MB可用(iPhone 4-4S,iPad 2)
  • 256MB设备 - > 100MB可用(iPhone 3GS,iPad,iPod Touch 3G-4G)
  • 128MB设备 - > 50MB可用(iPhone 3G,iPod Touch 1G-2G)

如果你想要严格承受不可见的天气,而不是在内存使用方面做出灵活的响应,那么你可以将这些数字减半,甚至可以减少数量。但如果在条件变得严峻时你不能抛弃任何东西,那么保证英镑可靠性将相当困难。这更像是一个滑动尺度,表示你愿意抛弃多少性能,以确定当时的可靠性。

在环境可预测性方面,iOS更像是PC而不是专用机器,无论好坏,还有一个操作系统的训练中士的额外奖励。

答案 1 :(得分:2)

最近我找到了这个很棒的工具来查找任何iOS设备的最大内存容量。我们还可以找到我们收到低内存警告的内存级别。

这是链接:https://github.com/Split82/iOSMemoryBudgetTest

答案 2 :(得分:1)

由于操作系统代表您在UIKit和OpenGL中执行的所有外部分配,因此很难给出实际数字。我尝试将自己的分配保持在30MB左右,50MB是我的最高端。我把它推高到90MB,但是我在这个级别上被抛弃了很多,所以除非使用所有内存的任务非常简短,否则这可能是一个坏主意。

如果您需要解决当前问题,您可以预先检测有问题的设备,并在启动时调低图形引擎的分辨率。您可以获得准确的设备信息,或者您可以检查显示比例(视网膜)以及处理器核心数量和RAM数量,以确定要使用的质量级别。

通过使用映射文件代替将数据加载到RAM中,我已经取得了巨大的成功,如果你有任何大数据分配,你可能想尝试一下。

还要注意从UIKit泄漏的视图/控件,因为它们消耗大量内存并且可能导致在看似随机的时间被抛弃。我有一些代码泄露了几个视图控制器的子视图。最终这些泄漏会扼杀我的应用程序,尽管我的应用程序的内存使用情况并未直接反映出问题。