【问题标题】:Delete unused persistent data without reference删除未使用的持久数据而不引用
【发布时间】:2015-07-05 15:27:28
【问题描述】:

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

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

这很好用,它是管理用户和他们的图像的一种非常简单的方法,它还确保我只下载一次图像,如果多个用户有相同的图像(例如,他们没有上传的公司徽标)一张图片)。

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

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

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

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

【问题讨论】:

    标签: ios core-data persistent-storage


    【解决方案1】:

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

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

    【讨论】:

    • fileModificationDate 正是我想要的!我什至不知道它存在。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2021-04-25
      • 2012-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-18
      • 1970-01-01
      • 2016-10-01
      • 2010-12-19
      相关资源
      最近更新 更多