SDWebImage 弱引用缓存
2025年7月7日 19:26
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 强引用 或被其他组件强引用), 就能命中缓存, 不消耗额外内存