iOS(初-中)级 (如何熟练运用SDWebImage,傻瓜学多
SDWebImage
这个对iOS 初级学者来说都是一个 应用 非常普遍的 第三方框架 我个人认为 这个第三方框架 在ios里 所有第三方框架中最牛b的框架 (没有之一) 比AFN 还要好. 因为它能解决开发者 对与图片的处理问题 .
认识
很多开发者认为SDWebImage 不就是个下载图片吗 一句话吗
[self sd_setImageWithURL:[NSURL URLWithString:@""] placeholderImage:[UIImage imageNamed: @""]];
你要真这么想 或者 我就只会用这个方法 那我就真的呵呵了
深入探解
问你几个问题 第一个请问[self sd_setImageWithURL:[NSURL URLWithString:@""] placeholderImage:[UIImage imageNamed: @""]]; 写入这个方法 之后 SDWebImage 会自动帮你生成在沙盒里
那么 图片在沙河默认存储周期 是多久?
会修改和限制你的缓存和大小吗? 会利用SDWeb清除缓存吗?
回答
SD 会自动保存沙盒 里的图片为一周
![屏幕快照 2016-03-08 下午11.23.53.png](http:https://img.haomeiwen.com/i1397692/fb000a71578c4734.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)在SDImageCache.h里
/**
* The maximum size of the cache, in bytes.
*/
@property (assign, nonatomic) NSUInteger maxCacheSize;
这句话就是 限制内存大小 因为是 bytes 比如图片内存限制为20M 那么应该写 20 * 1024*1024
怎么利用SDWeb清除缓存 在appDelegate
- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application
{
// 清除内存缓存
[[SDWebImageManager sharedManager].imageCache clearMemory];
// 取消所有下载
[[SDWebImageManager sharedManager] cancelAll];
}
大家注意哈 这个清除内存缓存 到底有啥用 记住这样一句话 除非你的图片正在展示 但凡在屏幕以外的图片 都会被清除 并且不会刷新加载图片!
SDWebImage
[cell.imageView sd_setImageWithURL:[NSURL URLWithString:app.icon] placeholderImage:[UIImage imageNamed:@"placeholder"] options:0 progress:^(NSInteger receivedSize, NSInteger expectedSize) {
// expectedSize: 图片的总字节数
// receivedSize: 已经接收的图片字节数
NSLog(@"下载进度:%f", 1.0 * receivedSize / expectedSize);
} completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {
NSLog(@"下载完图片");
}];
options 一般填写0 也可以选别的选项 比如 SDWebImageRetryFailed = 1 << 0, 就是下载失败从新下载
后期会写一个SDWebImage简单的 内部实现原理
就是SDWebImage 如和做到保存沙河路径 保存内存 cell的加载图片 如何避免 cell引起的重用问题,如何避免用户加载图片错位问题 第二次加载 如何从沙盒路径获取的一个流程