NSCache的详解,以及SDWebImage的缓存策略源码分析

 NSCache

讲解NSCache的基本使用,NSCache是Foundation框架提供的缓存类的实现,使用方式类似于可变字典,由于NSMutableDictionary的存在,很多人在实现缓存时都会使用可变字典,但NSCache在实现缓存功能时比可变字典更方便,最重要的是它是线程安全的,而NSMutableDictionary不是线程安全的,在多线程环境下使用NSCache是更好的选择。

NSCache

NSCache的使用很方便,提供了类似可变字典的使用方式,但它比可变字典更适用于实现缓存:

  1.  最重要的原因为NSCache是线程安全的,使用NSMutableDictionary自定义实现缓存时需要考虑加锁和释放锁,NSCache已经帮我们做好了这一步。
  2.  其次,在内存不足时NSCache会自动释放存储的对象,不需要手动干预,如果是自定义实现需要监听内存状态然后做进一步的删除对象的操作。
  3.  还有一点就是NSCache的键key不会被复制,所以key不需要实现NSCopying协议。

上面讲解的三点就是NSCache相比于NSMutableDictionary实现缓存功能的优点,在需要实现缓存时应当优先考虑使用NSCache。

 

 NSCache释放缓存

程序进入后台后,可以发现NSCacheDelegate的回调函数触发了,所以,当程序进入后台,NSCache对象会自动释放所有的对象。如果在模拟器上模拟内存警告,也可以发现NSCache会释放所有的对象。所以NSCache删除缓存中的对象会在以下情形中发生:

  1. NSCache缓存对象自身被释放;
  2.  手动调用removeObjectForKey:方法;
  3. 手动调用removeAllObjects;
  4. 缓存中对象的个数大于countLimit,或,缓存中对象的总cost值大于totalCostLimit;
  5. 程序进入后台后;
  6. 收到系统的内存警告。

SDWebImage的缓存策略

转载于:http://www.jianshu.com/p/239226822bc6

猜你喜欢

转载自blog.csdn.net/wang_gwei/article/details/90294559