zoukankan      html  css  js  c++  java
  • 图像缓冲池

    图像缓冲池

    使用模型缓存图像的问题

    优点

    • 不用重复下载,利用MVC刷新表格,不会造成数据混乱

    缺点

    • 所有下载后的图像,都会记录在模型中
    • 如果模型数据本身很多(2000),单纯图像就会占用很大的内存空间
    • 如果图像和模型绑定的很紧,不容易清理内存

    解决办法

    • 使用图像缓存池

    图像缓存

    • 缓存属性
    ///  图像缓冲池
    @property (nonatomic, strong) NSMutableDictionary *imageCache;
    
    • 懒加载
    - (NSMutableDictionary *)imageCache {
        if (_imageCache == nil) {
            _imageCache = [[NSMutableDictionary alloc] init];
        }
        return _imageCache;
    }
    
    • 删除模型中的 image 属性
    • 哪里出错改哪里!

    断网测试

    问题

    • image == nil 时会崩溃=>不能向字典中插入 nil
    • image == nil 时会重复刷新表格,陷入死循环

    解决办法

    • 修改主线程回调代码
    [[NSOperationQueue mainQueue] addOperationWithBlock:^{
        if (image != nil) {
            // 设置模型中的图像
            [weakSelf.imageCache setObject:image forKey:app.icon];
            // 刷新表格
            [weakSelf.tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationNone];
        }
    }];
  • 相关阅读:
    Cygwin配置总结
    javap 指令集
    超好用的Vim配置
    超过 130 个你需要了解的 vim 命令
    21、面向对象
    20、MySQLdb
    深入java字符串原理及其效率分析
    数据库执行计划
    SQL中EXISTS的用法
    mybatis之foreach用法
  • 原文地址:https://www.cnblogs.com/donghaoios/p/5089747.html
Copyright © 2011-2022 走看看