外部存储的 UIImage 使应用程序陷入困境

Posted

技术标签:

【中文标题】外部存储的 UIImage 使应用程序陷入困境【英文标题】:UIImage stored externally bogs down app 【发布时间】:2013-07-07 23:23:07 【问题描述】:

我现在正在开发的应用程序以 UITableView(带有自定义单元格)为中心,它从 Core Data 数据库加载数据。每个实体都有几个NSStrings、一个二进制数据属性和一个压缩后的UIImage,以及一个可转换的UIImage 属性,存储在外部。该应用程序运行得非常好,只保存了压缩的调整大小的图像,但是当我将完整图像也保存到可转换属性时,表格视图变慢并且我收到内存警告。我应该提一下,单元格中实际上只有两个 NSStrings 和压缩后调整大小图像的 jpeg 表示。

为什么存储在外部的全尺寸图像在不被访问时仍然会降低表格视图的速度,我可以做些什么来解决这个问题?

【问题讨论】:

定义“存储在外部”和“不被访问”。 存储在外部 - 在数据模型属性检查器中,“存储在外部记录文件中”旁边有一个复选标记。我读过在 Core Data 中存储 UIImage 时建议这样做。未被访问 - 我没有任何代码告诉要显示或以其他方式操作全尺寸 UIImage。它在实体中用于其他目的,不打算在表格视图中使用。 【参考方案1】:

建议将图像存储在文件系统上,并在 Core Data 中维护路径引用。

将图像加载到内存是很昂贵的,所以在交付到主线程之前在后台线程上执行此操作。您可以为图像加载维护一个堆栈,当用户快速滚动时很有用,因为可见单元格将被免费优先考虑。

除了这个通用的建议之外,没有什么可以说的了,你真的没有给我们太多的东西(没有代码,没有图像元数据,如大小等)。

【讨论】:

对这个问题的第二个回复中的第二个代码sn-p是否是保存到文件系统***.com/questions/6238139/…的适当方式? 这取决于这些图像的重要性;如果用户在您的应用中创建了这些,则考虑将它们放入文档中,否则使用缓存目录。

以上是关于外部存储的 UIImage 使应用程序陷入困境的主要内容,如果未能解决你的问题,请参考以下文章

访问令牌和刷新令牌困境 - JWT

当AT89S51单片机运行出错或程序陷入死循环时,如何摆脱困境?

将 NSData 数组转换为 UIImage 数组

陷入困境的疑问

开源项目存活有多难? 被数百万人使用的 Babel 陷入财务困境

开源项目存活有多难? 拥有数百万用户的 Babel 陷入财务困境