ios - 删除未引用的未使用的持久数据

标签 ios core-data persistent-storage

我有一个与服务器通信的应用程序。在这个应用程序中,我有一个表格 View ,其中我显示了我公司的几个人(他们的名字和姓氏以及他们的个人资料图片)。

每次打开 tableview 或需要刷新时,我都会从我的服务器获取用户列表。这些用户都有一个 image_name,我尝试在应用程序本身的数组中查找它。如果我在那里找不到它,我会从文档目录加载它,如果我在那里也找不到它,我会从我的服务器下载它并保存在设备本地以防止将来下载。

这非常有效,并且是管理用户及其图像的一种非常简单的方法,如果多个用户具有相同的图像(例如,当他们没有上传时公司 Logo ),它还确保我只下载一次图像一张图片)。

问题是我没有保留对这些用户的引用,因此该应用不知道哪个用户使用了哪个图像,或者即使图像仍在使用中也是如此。

因此,当 A 拥有图像 X 时,它将被下载到 iPhone。如果用户 A 然后将他的图像更改为 Y,应用程序将正确下载并显示图像 Y。但是,图像 X 永远不会从持久数据中删除。

我问你,stackoverflow 社区,处理这个问题的最佳方法是什么?

  1. 我是否应该开始保留对我的用户的引用,以便我也可以保留对旧图像的引用?
  2. 有没有办法找到上次从文档目录读取图像的时间戳?
  3. 我是否应该将图像名称存储在 coreData 以及对它们的所有引用中? (某种自定义 ARC 逻辑)
  4. ...

最佳答案

在某个时间点您有已用图像的列表,此时您还有一个保存到磁盘的图像列表。每天一次,您可以获取此信息,并在后台线程上对已使用和已保存的信息进行比较,然后将其删除。这应该不需要任何额外的数据存储。

如果您想让图像在停止使用后保留一段时间,您可以在每次使用该文件时“触摸”该文件(更新 fileModificationDate),之后您可以检查所有图像的修改日期并在此基础上删除。

关于ios - 删除未引用的未使用的持久数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29891302/

相关文章:

ios - 核心数据 NSPredicate 使用 in 子句获取实体关系

azure - 静态和动态 Azure 文件有什么区别?

docker - 持久存储 : How to mount a directory in Kubernetes?

ios - 特定商店的 NSFetchRequest

iphone - 锁定手机后,NSStream结束

ios - 我怎样才能使用 AIR 获得任何 ios 设备的分辨率..?

ios - 无法导入 robovm 绑定(bind)

ios - swift 4.2 ios 12 中的状态栏模糊 View (半透明)

cocoa - 核心数据迁移失败,错误为 "Can' t find model for source store”,但存在源的 ManagedObjectModel

ios - 使用 FetchedResultsController 使用 Core Data 中的条目自动填充 TextField 下方的 Table View