为啥在屏幕上绘制图像之前不会出现内存不足的问题?

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 对象的内部数据是如何被清除的。看起来我正在从屏幕上删除的图像会在内部被清除,即使我可能会收到内存警告,我最终也不会崩溃。

以上是关于为啥在屏幕上绘制图像之前不会出现内存不足的问题?的主要内容,如果未能解决你的问题,请参考以下文章

图像不会绘制到屏幕 C++

为啥 PyGame 在延迟或睡眠之前没有在窗口中绘制?

为啥在iOS模拟器中实际启动屏幕出现之前会出现白屏

为啥我无法在画布上正确绘制 [重复]

为啥在 GLFW 窗口中使用此代码在我的屏幕上没有绘制立方体?

为啥我的 Colab 会话内存不足?