最近对iOS缓存做了总结,其中对YYCache和SDWebImage中的缓存机制SDImageCache的分析和学习,把学习的相关文档总结分享给大家
YYCache 采用了内存缓存和磁盘缓存组合方式,区别了内存缓存和磁盘缓存不同点。从初步认识缓存,再到如何优化缓存(YYCache设计思想)以及网络和缓存同步流程。分析的非常全面,希望对你有所帮助。
参考文献:
YYCache: https://github.com/ibireme/YYCache
YYCache 设计思路 :https://blog.ibireme.com/2015/10/26/yycache/
总结:在实践的项目开发中并不一定完全按照这样做,有时候过渡设计也是一种浪费,要多了解其他设计思路至之后,针对项目的实际出发找到适合的缓存策略才是最好的!
2、SDWebImage中的缓存机制SDImageCache
SDWebImage提供一个UIImageView的Category,用来加载和缓存来通关HTTP传输的图片资源。提供了缓存管理、异步下载、缓存校验等功能,同一个URL下载次数控制和优化等特征。
核心类成员:
-
SDWebImageManager
-
SDWebImageCache
-
SDWebImageDownloader
-
SDWebImageManagerDownloadOperation
-
提供了如下基本操作:
缓存计算,它的单位为字节
-
[[[SDWebImageManager sharedManager] imageCache] getSize];
-
缓存图片的数量
-
[[[SDWebImageManager sharedManager] imageCache] getDiskCount];
-
缓存清理,第一种是内存缓存,第二种是硬盘缓存
-
[[[SDWebImageManager sharedManager] imageCache] clearMemory];
-
[[[SDWebImageManager sharedManager] imageCache] clearDisk];
-
SDImageCache *imageCache = [[SDWebImageManager sharedManager] imageCache];
-
//SDImageCache *imageCache = [SDImageCache sharedImageCache];
-
查找图片:
-
UIImage *cacheImage = [imageCache mageFromKey:myCacheKey];
-
缓存图片:
-
[ imageCache storeImage:myImage forKey:myCacheKey];
-
在
SDImageCache中
图片采用了二级缓存策略。图片缓存时,在内存有缓存,在磁盘中也有缓存。其中,内存缓存是通过NSCache
实现的。缓存步骤:
a、将图片缓存在内存中
b、判断图片的格式是png或是jpeg,将图片转化为
NSData
数据c、如果是在mac_os系统中,直接将图片转化为
NSBitmapImageRep
数据d、获取图片的存储路径,其中图片的文件名是通过传入的key经过md5加密后获得的。
e、将图片存储磁盘中
-
参考文献:
iOS SDWebImage 缓存机制与缓存策略
SDWebImage中的缓存机制
总结:SDImageCache已经帮我们实现了图片缓存机制,要明白其中的原理,查看源码和分析,让我受益匪浅。