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];
        }
    }];
  • 相关阅读:
    Vue2020
    Vue2020
    Vue v-model双向数据绑定 的实现
    TCP 粘包
    黑幕模板
    STL总结与例子
    中缀表达式转后缀表达式
    php 转换数组里的时间戳
    gorm踩过的坑
    WxJava使用lettuce客户端的redis实现微信access_token等接口重复利用
  • 原文地址:https://www.cnblogs.com/donghaoios/p/5089747.html
Copyright © 2011-2022 走看看