refer to Cache

缓存

  • plist(主要是系统设置)
  • Cache缓存 (保存在磁盘、内存中)

    NSCache

1.NSCache 简单介绍
1)NSCache是苹果官方提供的缓存类,具体使用和NSMutableDictionary类似,在AFN和SDWebImage框架中被是用来管理缓存
2)NSCache在系统内存很低时,会自动释放对象,接收到内存警告时主动调用removeAllobject方法释放对象
3)NSCache是线程安全的,在多线程操作中,不需要对NSCache加锁

2.NSCache属性和方法介绍

1)属性介绍:
name:名称
delegat:设置代理
totalCostLimit:缓存控件的最大总成本,超出上限会自动回收对象,默认值为0,表示没有限制
countLimit:能够缓存的对象的最大数量:默认值为0,表示没有限制
evicrsObjectsWithDiscardedContent:标识缓存是否回收废弃的内容
2)方法介绍:
在缓存中设置指定键名对应的值,0成本

-(void)setObject:(ObjectType)obj forkey:(KeyType)key;  

在缓存中设置指定键名对应的值,并且指定该键值对的成本,用于计算记录在缓存中的所有对象的总成本,当出现内存警告或者超出缓存总成本上限的时候,缓存会开启一个回收过程,删除部分元素

-(void) setObject:(ObjectType)obj forKey:(keyType)keycost:(NSUInteger)g;  

删除缓存中指定键名的对象

 -(void)removeObjcetForKey:(keyType)key;  

删除缓存中所有的对象

-(void)removeAllObjects;  

YYCache

1.简书汉斯哈哈哈

http://www.jianshu.com/p/b8dcf6634fab

2.YYCache 基于sqlite3.0

(1)SQLite轻量级的数据库 使用原生的C函数库 使用时添加libsqlite3.dylib 接着在使用SQLite API的Object-C类中使用 导入头文件 #import<sqlite3.h>
(2)数据存取读出:
** 存:存入内存时同时写入磁盘。

** 读:
1)先从内存中读,有就直接拿来用;
2)内存没有再从磁盘读,磁盘有就直接拿来用,并写入内存;
3)内存和磁盘都没有,返回空。

YYMemoryCache

http://www.jianshu.com/p/492c3c3a0485

实现原理

YYMemoryCache是内存缓存,存取速度非常快。但缓存的容量是有限的,当Cache占满后,再缓存数据就失败,必须选择一个缓存快来替换掉已经缓存了的块。

1.LRU 应运而生

LRU 根据各块使用情况,总是选择那个最长时间未被使用的块替换。

LRU 缩写为Least Recently Used 即最近最少使用 它是一种页面置换算法同时也是一种缓存机制。

2.LRU采用两种数据结构实现

  • 双向链表

  • 哈希表

3.Cache操作

  • 插入:当Cache未满时,新的数据项只需插入到双链表头部即可

  • 查找:每次数据项被查询到,都将此数据项移动到链表头部

  • 替换:当Cache满时,将新的数据项查到双链表头部,并删除双链表的尾结点。

使用

1.图标--最常用的图标显示


内存缓存的处理思路

1)当图片下载完成后,除了在TableView显示外,还要保存一份在内存缓存中

2)当图片需要展示的时候,先查看是否已经下载过,如果已经下载过,有缓存,如果有那么直接使用缓存里的数据,否则下载下来用

3)可以用字典和数组的方式实现
示例代码

- (NSMutableDictionary *)imageCache{
    if (_imageCache ==nil) {
        _imageCache = [NSMutableDictionary dictionary];
    }
    
    return _imageCache;
}

磁盘缓存的处理思路

1)当图片下载完成后,除了保存一份在内存缓存中,还要保存一份到沙盒中,也就是磁盘中

2)查看是否有磁盘缓存,如果有那么使用磁盘磁盘,保存一份到内存中

//1.得到cache路径

NSString *caches = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)lastObject];

//2.文件名称

NSString *fileName = [appM.icon lastPathComponent];

//3.拼接文件的全路径

NSString *fullpath = [caches stringByAppendingPathComponent:fileName];

//4.尝试查看是否有磁盘缓存

NSData *data = [NSData dataWithContentsOfFile:fullpath];

//5.废弃磁盘缓存

data = nil;

if (data) {

UIImage *image = [UIImage imageWithData: data];

cell.imageView.image = image;

//6.保存一份到内存中

[self.images setObject:image forKey:appM.icon];

NSLog(@"%zd行  对应的图片  从  磁盘  中加载",indexPath.row);

2.当发生内存警告的时候 手动清理内存缓存

[self.image removeAllObject];

3.当下载图片可能会出现的问题

(1)UI卡顿 所有的下载都在主线程中处理,解决办法 开子线程下载图片

(2)图片重复下载(用户上下滚动) 内存缓存--->优化(磁盘缓存)

(3)当网速很慢的时候,图片的下载操作会被添加到队列中多次,当内存缓存和磁盘缓存中图片都不存在的时候,先检查图片的下载操作是否存在,如果存在那么等待即可,如果图片的下载操作不存在,那么再去封装操作去下载该图片-->操作缓存

(4)数据显示错乱

先清空cell的图片或者设置占位符

(5)url不正确等数据问题
下载完图片之后先判断图片是否有值,有就直接返回或者从操作缓存中删除

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

推荐阅读更多精彩内容