【问题标题】:IOS Image memory usageIOS镜像内存使用
【发布时间】:2012-04-21 02:02:39
【问题描述】:

我想知道iOS在显示图像时如何利用内存...

例如: 我有一个图像,它的 2000w、2000h,但在这种特殊情况下,iphone、ipod 有一个 460x920 的矩形(只是一个例子)......如果图像对于 iOS 设备的矩形是可见的,我肯定知道该内存正在被使用,但是矩形中当前未绘制的图像的其余部分会发生什么?内存被消耗了吗?还是 iOS 足够聪明,不会仅将内存用于绘制部分?或者这被认为是内存泄漏?

我想知道这一点,因为在某些游戏中,您需要更长的场景和大图像,在这些场景中使用视差节点或任何类似的东西会有所帮助。但我开始怀疑这会如何影响我的记忆力。

提前感谢您的回答。

【问题讨论】:

    标签: ios image memory memory-leaks cocos2d-iphone


    【解决方案1】:

    在 iPhone 4 上,您有 512MB 的 RAM。它在 CPU 和 GPU 之间共享,这意味着 Video RAM 会消耗其中的一部分。

    如果您正在谈论分配 2000 x 2000 像素的 UIImage。即使它在屏幕外,它确实会消耗 RAM。准确地说,它消耗2000*2000*4,大约16MB。这是由 Objective-c 运行时管理的。这是一个相当大的数额。据我所知,UIImage 在 4 系列设备上的最大尺寸为 2048x2048,在 3 系列设备上为 1024x1024。

    查看矩形或您所说的屏幕是视频 RAM 的一部分。典型的显示过程包括在 Video RAM 中合成图像,以便图形硬件可以显示它。

    因此,您在这 512MB 的 RAM 中有两个图像副本。一个您可以通过代码 (RAM) 加载和修改,另一个较小的用于显示 (VRAM)。尽管在 VRAM 中,只使用屏幕的大小。

    不,这不是内存泄漏。

    【讨论】:

    • 如果您不介意我问,那么处理这种情况的最佳方法是什么?因为很明显,我不想仅仅因为我的游戏需要一个大的背景图像而使用所有的内存(所以制作动画将是一个问题)......我如何才能只使用那一刻所需的内存?而不是加载内存中的所有图像。给出答案的人也说:“您可以使用 CATiledLayer 之类的东西来更好地管理图像。”这是针对这种情况的最佳解决方案吗?
    • 游戏图像往往很小。我的意思是,你最好修改你的设计。不过,您可能会发现 CATiledLayer 有点神奇。查看cimgf.com/2011/03/01/subduing-catiledlayer。它基本上像早期的谷歌地图一样工作。大图像被分割成更小的图块,由于它太大,按需从资源包中逐块加载是唯一可行的解​​决方案。
    • 正是我要找的……我需要这个大图像的原因是因为我需要一个大的土地空间区域,例如,如果你玩过 fieldrunners、云巡逻、哨兵, chono trigger 等具有 biiig loong 风景图像的游戏,我需要它,但我不想让设备的内存过载,这就是我非常关心这个的原因。谢谢我检查一下。
    【解决方案2】:

    是的,将整个图像加载到内存中。您可以使用 CATiledLayer 之类的东西来更好地管理图像。

    【讨论】:

    • 谢谢,我会试试那个 CATiledLayer。
    猜你喜欢
    • 2012-01-24
    • 2018-11-18
    • 1970-01-01
    • 1970-01-01
    • 2017-02-14
    • 1970-01-01
    • 2018-12-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多