我正在开发一款至少以3g为目标的ios游戏.我们正在将高清资产用于视网膜显示设备(iphone 4,ipod touch 4th gen).
记忆方面,Ipod Touch 4th gen似乎是我们最受约束的设备,因为它具有与3gs相同的RAM(256与Iphone 4的512相比),但我们正在使用HD资产.该应用程序曾经在尝试加载100-110mb的ram时崩溃,但现在我们已经降到70MB,我们从来没有加载崩溃.
经过大量的搜索后,似乎没有官方的硬限制,那么我们应该如何知道要使用什么内存预算才能安全?我们希望能够为艺术家提供他们可以使用的预算,而不必担心每张地图的内存问题.
不同的iPhone有不同的发布内存4GB,8GB和16GB.触摸可以有32GB.我的理解是这是离线内存(磁盘相似).
可用于我的Cocoa应用程序的设备中有多少实际快速内存?
是否有预先配置的虚拟金额?
我有一个质量很重的OpenGL游戏,我想根据设备有多少RAM进行调整.最高分辨率的纹理我在iPhone 4或iPad2上运行良好,但早期的设备在加载纹理的过程中崩溃.我有这些纹理的低分辨率版本,但我需要知道何时使用它们.
我目前的策略是检测特定的旧设备(3GS有低分辨率屏幕; iPad没有摄像头),然后只加载IPad2及以上和iPhone 4及以上的高分辨率纹理 - 我想我需要为iPod touch做点事.但我更倾向于使用特征检测而不是硬编码设备模型,因为模型检测对于API和硬件的未来变化是脆弱的.
我正在考虑的另一种可能性是首先加载高分辨率纹理,然后在我得到低内存警告时丢弃并用lo-res替换它们.但是,我不确定我是否有机会回应; 我注意到应用程序经常在调试控制台上出现任何通知之前死掉.
如何检测我正在运行的设备是否有足够的RAM来加载我的纹理的高分辨率版本?
退后一步,是否还有一些我可以使用的自适应技术,这是特定于OpenGL纹理内存的?
笔记:
我搜索和关闭SO以获得与可用RAM检测相关的答案,但它们基本上都建议分析内存使用情况并消除浪费(最大限度地缩短临时工作的寿命,以及所有这些).我已经做了尽可能多的事情,而且我无法将高分辨率纹理压缩到旧设备中.
PVRTC不是一种选择.纹理包含片段着色器要使用的数据,并且必须以无损格式存储.