苹果给每个应用程序设置20M的内存警告量,30M的闪退量,游戏会略微放款10~20M,需要向系统申请。
这一条说明除了系统本身占用内存以外,任何程序几乎都不可能占用超过50M内存。←此句有疑义,是我自己没有表达清楚。应该是任何程序都不可能一次性使用超过50M内存,如果需要更大内存的话貌似是会用其他手段多次申请并载入,未验证,不过每个程序可以申请到的内存数量是有上限的。
关于后台,是如下解释的:
苹果设计本身就没有后台,当你把程序最小化的时候程序就暂停了一切活动。如果应用想继续运行一部分功能的话,必须向系统申请运行时长,或者调用系统功能,比如音乐播放。由此跟安卓需要大内存来支持后台运行的区别就显而易见了,因为安卓是在Linux上跑的Java虚拟机,他的内存管理机制是申请之后就一直在那放着,等一个Runtime周期结束之后会自动收回不必要的内存。
关于大型软件退回到主页以后再次进入不是最小化,而是直接重启的原因,我本来认为是内存溢出导致程序崩溃,在闪退以后释放内存并重新加载导致的程序重启,不过有的人不同意此观点,解释如下:
“大型游戏崩溃是因为绝大部分程序员是从Java转过来的,在进入背景的时候,有一个application Did Backgroung这么一个方法,他们会在这里进行想要的内存申请工作,以便达到他们期待的后台运行的目的,但是在applicationDidBecameActive的时候却没有把握好页面加载的时机,一次性把全部资源加载进内存导致超出系统允许范围,就崩溃了。”这句话结合本文第三段来看,确实很好的解释了为什么有的游戏会崩溃,尤其是多平台游戏,而苹果独占游戏几乎没有闪退的原因。
不知道上面的对大家有没有帮助,简而言之的话,就是苹果只要不出真正的后台运行,它就基本上不会把内存提升到1G以上。当然或许也有可能是系统自身运行需要1G以上的话,苹果也是会推出大内存版的。
简要的说明一下苹果为什么不用2G内存:
IOS只要不彻底重新编写的话,内存再多也无意义,因为它既不支持后台,又给APP设置了50M的内存使用上限。打个比方,你开法拉利(超大内存),我开QQ(1G内存),咱俩一起在路上跑(使用内存),但是限速50(内存使用限制),只要超过限速就扣车(超过限制即强行释放内存),你开再好的车也不可能比我快多少,因为苹果不让,除非苹果放开限速让你随便跑(开放内存配额上限)。但是不把路挖掉重新铺的话(系统限制,除非从头重新编写系统,或者大刀阔斧的做改造,否则开放意义也不大),就不能开放限速,所以现阶段只能限速50.这就是IPHONE只能用1G内存的原因。
盖楼回复 X
(您的评论需要经过审核才能显示)