在iOS上使用内存监视器时,虚拟内存消耗和实际内存之间的区别

6
我在我的应用程序中遇到了一个问题。 我一直在iPad 3上进行测试,偶尔检查iPad 1以确保一切正常。
我在我的应用程序中播放UIImageView动画,但它会在退出前仅显示“收到内存警告”消息。
我一直在使用Instruments中的对象分配工具,但根据那个,我的内存使用率非常低。 因此,在研究了一段时间后,我看到了Larson先生的这篇文章:https://dev59.com/hW035IYBdhLWcg3wQt2n#5627221 现在我改用Memory Monitor工具。 但是,我不明白为什么会退出。 第一代iPad有256MB的RAM。 现在我知道我不能使用所有RAM ... 有些人说你不应该使用超过100MB。
但那是真实内存还是虚拟内存...或者可能是某种组合? 当它崩溃时,我的实际内存始终在20-25MB之间,但虚拟内存在190-205MB左右。
以下是屏幕截图: enter image description here 有人能够解释一下吗?

我建议启用VM Tracker工具来运行应用程序。VM Tracker显示图形内存使用情况(虚拟内存)。很可能您的UIImageView动画正在加载过多的图像到内存中以执行动画。更有效的动画技术将是合适的选择。 - Daniel Martín
那么,我有哪些更有效的动画技术选项?此外,VM跟踪器是否会显示我一次加载太多图像? - daveMac
1个回答

6

如果你在WWDC 2012 Session Videos页面搜索iOS App Performance: Memory,可以找到WWDC(Session 242)视频,它会让你更好地理解虚拟内存和实际内存之间的区别。

以下是一个快速概述: 指针范围= 2 ^ 32 = 4GB,这比任何设备(Apple已发货)的物理内存都要大。这是通过将所有可用空间划分为4kb块来完成的。应用程序可以访问的并非所有内存都在同一时间内位于物理内存中。这些4kb块称为页面。您的分配从较大的虚拟内存块中拆分出来。然后,将这些虚拟内存对象映射到物理内存。


4
这是一个非常棒的视频,在使用记忆工具之前应该观看。 - Jesse Rusak
我看了这个视频,感觉有所了解,但我仍然不知道如何判断我的应用程序是否一次性加载过多。 - daveMac
难道没有更安全或更好的方法来确定应用程序是否一次加载太多内容,而不仅仅是确保它不会退出吗? - daveMac
如果你加载的内容过多,你将会收到低内存警告。https://dev59.com/0Gox5IYBdhLWcg3wDgPR。请确保使用了didReceiveMemoryWarning方法。 - Jaybit

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接