多图下载综合案例

  • 多图下载的思路(考虑磁盘缓存)
// 伪代码
if(1.根据图片的url去图片缓存images中取图片){
    将图片显示到cell上
} else{
    if(2.检查沙盒中是否存在对应的图片){
        2.1将从沙盒中加载的图片显示到cell上
        2.2保存一份到内存中
    } else{
        显示占位图片
        if(3.根据图片的url查看操作缓存operation中是否存在下载操作){
            提示正在下载
        } else{
            4创建下载操作
                4.1将图片放到图片缓存images中
                4.2将图片存入到沙盒中
                4.3刷新表格
                4.4将操作从操作缓存operation中移除
            5把操作保存到操作缓存operation中
            6把下载操作添加到队列中执行
        }
    }
}
  • 知识点
    • UITableView展示数据
    • 创建模型类描述plist文件
    • 加载plist文件
    • 字典转模型
    • 获取文件的沙盒路径
    • 根据沙盒路径从沙盒中存取数据
    • 刷新UITableView指定行的数据
    • 设置占位图片
    • 内存缓存(图片缓存和操作缓存)
      • 使用NSMutableDictionary做缓存操作
    • NSOperation和线程间通信相关知识
    • 程序的容错处理
  • 问题和对应的解决方案
    • 图片的重复下载问题
      • 内存缓存
      • 磁盘缓存
    • UI不流畅
      • 开子线程下载图片
    • 开子线程下载图片时出现的问题
      • 图片不显示
        • 原因:在获取到图片后在主线程中只是设置了cell的imageView的image属性,并没有做到真正的刷新UI操作
        • 解决:在获取到图片后在主线程中使用tableView的 reloadRowsAtIndexPaths: withRowAnimation:方法刷新指定行
      • 重复下载
        • 原因:当网速比较慢,用户滑动比较快时,图片来不及下载完成,用户就又请求下载图片
        • 解决:操作缓存(使用NSMutableDictionary做操作缓存)
      • 数据错乱
        • 原因:cell的循环利用
        • 解决:设置占位图片
    • 程序的容错处理问题
      • 原因:当图片的icon错误时,不能下载到对应的图片,但是在把图片写入到缓存之前没有做判断,此时会把nil写入到缓存中,而缓存中的数据是以字典的形式保存的,不能有空值,所以程序会报错
      • 解决:在把图片写入到缓存之前先做判断,如果没有图片就把下载图片的操作从操作缓存中移除并返回,程序不再继续往下执行;如果有图片就做图片缓存操作
  • 应用沙盒结构分析
    • 应用程序包
      • 所有资源文件
      • 所有可执行文件
    • Documents
      • 保存应用运行时生成的需要持久化的数据
      • 该目录下的数据在同步时会备份
    • temp
      • 保存应用运行时需要的临时数据
      • 该目录下的数据在同步时不会备份,应用运行完毕后会清楚该目录下的数据
    • Library/Caches
      • 保存应用运行时生成的需要持久化的数据
      • 该目录下的数据在同步时不会备份
      • 一般存储体积大、不需要备份的非重要数据
    • Library/Preference
      • 保存应用的所有偏好设置
      • 该目录下的数据在同步时会备份
  • 获取文件的沙盒路径
-(NSString *)getFullPath:(NSString *)urlStr
{
    //caches
    NSString *caches = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];

    //获得文件名称
    NSString *fileName = [urlStr lastPathComponent];

    //拼接文件的全路径
    NSString *fullPath = [caches stringByAppendingPathComponent:fileName];


    return fullPath;
}
  • 图片可以写入到缓存中,但是不能写入到沙盒中,要想把图片写入到到沙盒中,只能通过把图片的二进制数据写入到沙盒中的方法来实现
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,362评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,330评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,247评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,560评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,580评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,569评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,929评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,587评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,840评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,596评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,678评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,366评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,945评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,929评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,165评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,271评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,403评论 2 342

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,392评论 25 707
  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,121评论 29 470
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,580评论 18 139
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,016评论 4 62
  • 周末有事不能陪花小姐上学,叮嘱外婆一定上课带好她,最重要的一点,不要让她坐在老师对面的正中间。花卷的外婆不理解,每...
    半秋_33阅读 276评论 0 0