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

时间:2015-04-27 09:00:07

标签: ios core-data persistent-storage

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

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

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

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

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

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

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

2 个答案:

答案 0 :(得分:1)

您可以为下载的图像添加前缀,并在获取图像时,检查持久存储中的所有图像是否有此前缀,然后删除(如果有)。每次客户端提取时,您只需要删除(最多)一个图像,这对客户端来说不会太沉重。

答案 1 :(得分:1)

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

如果您希望图片在停止使用后暂停一段时间,您可以触摸'每次使用该文件时,文件(更新fileModificationDate),然后您可以检查所有图像的修改日期并在此基础上删除。