首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >极高的内存使用率-如何处理iPad上的大图像?

极高的内存使用率-如何处理iPad上的大图像?
EN

Stack Overflow用户
提问于 2012-09-21 12:00:28
回答 2查看 2.4K关注 0票数 6

最近,我在应用程序中遇到了一些内存管理问题。

该应用程序利用一些高质量的图像,这极大地增加了内存的使用。

以下是一些关于该项目和图片细节的信息,以使问题更加清楚:

  • 大约有90张图片添加到我的项目中。其中一半设计为@2x大小,以支持新的iPad Retina显示器。因此,每个设备的最大图像数约为45张。
  • 所有图像的Retina版本的总大小约为25 MegaBytes (每个indivisual图像的大小从10 KBs到6.8MB不等)。同时,所有标准图像的大小等于11 MegaBytes。
  • 项目的XCode存档大小等于44 MegaBytes。
  • 标准版本图像的最大分辨率为1500x4000 px,而最小分辨率约为60x60px。
  • Retina版本图像的最大分辨率约为3000x8000 px,而最小分辨率约为120x120px。
  • 视网膜版本的图像在其名称中有"@2x~ipad“后缀,而其他图像的后缀是"~ipad”。
  • 大多数图片只有一个实例是在应用生命周期中创建的。
  • 大约25张图片是在应用程序启动时加载的,其余的在游戏中加载。
  • 我在任何想要加载映像的地方都使用了UIImage imageNamed:@"image_name.png“(使用UIImage imageWithContentsOfFile和UIImage imageWithData非常低效率)。

但这里有个问题:

当我使用仪器跟踪内存使用情况时,我看到应用程序的内存使用率非常高。以下是不同情况下内存分配的统计数据:

  • 在启动时使用标准映像在iPad 2上分配内存: 58 MB
  • 在游戏期间使用标准映像在iPad 2上分配内存(当加载所有映像时):131 MB
  • 在启动时使用Retina映像在新iPad上分配内存: 211 MB
  • 游戏期间使用Retina图像在新iPad上分配内存(当所有图像加载时):470 MB

知道为什么分配的内存比图像的总大小要高得多吗?

EN

回答 2

Stack Overflow用户

发布于 2012-09-21 12:21:33

这可能是因为您使用的图像是用png或jpg压缩的,并且解码到内存时比原始文件大小要大得多。它将占用像宽度*高度*4字节的内存,不管图像内容如何。

票数 0
EN

Stack Overflow用户

发布于 2012-09-21 12:58:30

首先,不要对符合任何条件的图像使用-[UIImage imageNamed:]

  • 大尺寸
  • 中等尺寸
  • "…只在应用生命周期中创建了一个实例…。“

但是,您需要注意这些更改如何影响您的程序。您目前在任何可能的情况下都依赖内存。我的建议是将其中一些责任转移到其他领域。分配负载,使它仍然感觉很快,但有一个更好的资源平衡。一旦您使用较少的缓存,您将注意到,您可能最终会读取和展开一些文件不止一次。然后尝试找出您应该在何处共享加载的图像。当然,只装载你需要的东西。然后把你学到的东西拿出来,然后把它应用到你的其他图像中。

另外,把你的图像分解--你的图像要比显示器的大小大几倍。如果它们需要这样的大小,那么将它们分解--如果它们只在出现时被缩小,那么在分发之前调整它们的大小(例如,它们不需要缩放-它将更快地显示,看起来更好,并且消耗更少的内存)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12530199

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档