管理从服务器下载的大量图片

superzxn0705 2014-05-11 05:53:10
我的一个应用程序需要处理大量的从服务器下载的图片。图片都是通过用户上传得来的。在不同的分类下会显示不同的图片,这些图片每次刷新有一些可能有变动,有一些没有。我用UITableView显示一系列的缩略图,点击进去后显示大图

之前我是用NSCache来处理图片,但是问题是如果用户从后台恢复,图片都不在了,需要重新下载,很不好的用户体验。

我上网搜索了一些方式,不知道像处理此类问题通用的解决方法是什么,就像淘宝,人人,facebook这些

Core Data/ SQLite:
这种方式应该是最理想的情况,即把需要的信息,图片存到Core Data。图片存储到Disk,然后把路径存储到Core Data。这种方式的问题是如果我刷新一个列表,有些是没有变化的,有些是变化的,怎么妥善处理?尤其是如果接下来我要使用分批显示的方式,即先下载前20个,再下载接下来20个,就更不好管理了

NSCachesDirectory:
我后来又想到或许可以用这个来存储图片,通过系统的自动删除机制,免除了我手动管理不用的图片。但是我不清楚在这个文件夹里面的文件什么时候会删除?我不希望是在把所有磁盘都占满之后再删除。而且通过我调查淘宝,有一些内容虽然相同,但是过一段时间后还是要重新下载的,不知道是不是通过这个方式

其他的方式还在调查中,希望大牛可以解答,谢谢
...全文
339 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
LichKingSZ 2014-05-17
  • 打赏
  • 举报
回复
那这样就有业务逻辑的内容咯,最好后台能提供这样的列表。之前我们说的都只是如果保证图片的同步性。
superzxn0705 2014-05-16
  • 打赏
  • 举报
回复
引用 2 楼 sinom 的回复:
如果是我写,应该会采用这种方法: 1、为每张用户传的图片生成MD5码; 2、图片下载后直接存在沙盒中,并在Core Data中记录此图片本地Path、下载时间、和MD5; 3、下次需要调取此图片时,可先通过MD5码与服务端进行比较比对,如不一样就新重下载。然后还可以增加有效期等判断,比如超过1个月的重新下载什么的,你自己定;
这些会在一个列表中显示,如果我更新这个列表,该如何操作呢?比如有一些图片还会保留下来,有一些就不再使用了。
LichKingSZ 2014-05-15
  • 打赏
  • 举报
回复
如果是我写,应该会采用这种方法: 1、为每张用户传的图片生成MD5码; 2、图片下载后直接存在沙盒中,并在Core Data中记录此图片本地Path、下载时间、和MD5; 3、下次需要调取此图片时,可先通过MD5码与服务端进行比较比对,如不一样就新重下载。然后还可以增加有效期等判断,比如超过1个月的重新下载什么的,你自己定;
伦敦iOS小牛 2014-05-13
  • 打赏
  • 举报
回复
用Core Data 保存的话,每张图片都应该有一个 id, 版本号和url, 下载的时候最好用 NSOperation+OperationQueue+NSURLConnection, 每次以id 号来保存照片到app 目录中。 服务器应该有一个api可以告诉app 有没有图片更新,有的话,返回一个列表,这样app 就去更新列表中的图片。 如果服务器没有这样的api, 就只你能检查每张图片的版本号进行对比,有新版本就下载然后替代旧的。

29,028

社区成员

发帖
与我相关
我的任务
社区描述
主要讨论与iOS相关的软件和技术
社区管理员
  • iOS
  • 大熊猫侯佩
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧