SDWebImage 弱引用缓存

SDWebImage 是iOS 开发最流行的异步图片加载框架, 其中的缓存模块 SDImageCache 有一个很精巧的设计弱引用缓存, 源码参考

1
@property (nonatomic, strong, nonnull) NSMapTable<KeyType, ObjectType> *weakCache; // strong-weak cache

在我们的项目中引入了这个小修改, 整体的缓存命中率有1%左右的提升,

是否开启 内存缓存命中率 磁盘缓存命中率 下载命中率
开启弱引用缓存 67.99% 21.36% 10.67%
不开启弱引用缓存 66.76% 21.99% 11.25%

什么是弱引用缓存

  • 强引用表(NSDictionary), 对图片保持强引用, 保证缓存一定存在
  • 强引用表(NSCache), 对图片保持强引用, 且会随着系统内存大小/切换前后台自动清理缓存
  • 弱引用表(NSMapTable), 对图片保持弱引用, 只要图片还在内存中(被 UI 强引用 或被其他组件强引用), 就能命中缓存, 不消耗额外内存

引入了弱引用缓存的图片加载流程

-------------本文结束感谢您的阅读-------------

欢迎关注我的其它发布渠道