为啥在屏幕上绘制图像之前不会出现内存不足的问题?
Posted
技术标签:
【中文标题】为啥在屏幕上绘制图像之前不会出现内存不足的问题?【英文标题】:Why do I not get low memory issues until images are draw on the screen?为什么在屏幕上绘制图像之前不会出现内存不足的问题? 【发布时间】:2010-05-27 00:32:21 【问题描述】:我能够将 200 多个 UIImage 对象加载到 NSMutableDictionary 中,而不会出现任何内存警告问题。
当我开始在屏幕上显示它们时(大约显示 10-20 张图像后),我收到内存不足警告并最终崩溃。
任何时候只显示大约 8 张图像。
在屏幕上实际绘制 UIImage 是否需要额外的内存?
没有出现内存泄漏,我已经多次检查代码是否存在泄漏。
【问题讨论】:
【参考方案1】:很可能您最初创建了指向图像的链接,此时实际读取的唯一数据是尺寸和图像类型(简而言之),其余数据通常不需要,直到通常从后台请求过程,即显示在屏幕上。当它显示时,实际的图像数据从文件路径下载并根据其图像类型进行解码,然后将其缓存,因此不必再次下载,如果您使用双/三缓存,缓存会占用大量内存缓冲屏幕外绘图需要额外的内存。 尝试在加载新图像之前处理所有图像数据。
【讨论】:
【参考方案2】:documentation 表示拥有UIImage
并不一定意味着图像实际上存储在内存中,因为它可以从图像缓存中清除。但它确实说,如果你尝试绘制它,它将被拉回记忆中。也许它会在警告您内存不足的情况之前开始从其图像缓存中清除。这解释了你所看到的一切。
【讨论】:
谢谢。我想知道 UIImage 对象的内部数据是如何被清除的。看起来我正在从屏幕上删除的图像会在内部被清除,即使我可能会收到内存警告,我最终也不会崩溃。以上是关于为啥在屏幕上绘制图像之前不会出现内存不足的问题?的主要内容,如果未能解决你的问题,请参考以下文章