#了解NSDictionary和NSCache的区别,延伸到SDWebImageCahce和YYCache(个人倾向YYCache)
NSDictionary和NSCache最大的区别是:
1、NSCache线程安全的(内部使用互斥锁实现)
2、NSCache会自动释放内部数据(收到内存警告会立即释放)
3、NSCache的key不必遵守NSCopy协议
4、NSCache内部未使用NSFoundation已有类,使用的是libcache.dylib。
所以自己实现简单的缓存策略,在NSDictionary和NSCache间 还是选择NSCache。
当然NSCache也有缺点,网上的说法(未测试)当key相似度较高时,存取速度急剧下降。缓存释放策略不太好。
SDWebImageCahce原理:
内部维护一个NSCache的子类和文件系统,以图片URL为KEY,维护硬盘和NSCache子类中的缓存。在硬盘读写时,会比较耗时,所以使用队列来保证顺序执行,用NSOperation来做取消,另外还使用到了autoreleasepool,可以让内存在出autoreleasepool时释放(更快释放内存),这在YYCache中也用到了,以后快速释放内存的需求 可以借鉴。
SDWebImageCahce在加载图片的过程:
先在内存维护的NSCache子类中进行寻找,找到就返回;
内存中未找到去硬盘中找,找到,将图片存到内存中后返回,
硬盘中也未找到,就发起网络请求,请求成功后,将数据存到内存和硬盘,返