SDWebImage 的使用
这个库提供了一个类别UIImageView支持远程图片来自网络。它提供了:UIImageView类别添加web图像和缓存管理可可触摸框架异步图片下载器异步内存+磁盘映像缓存自动缓存过期处理GIF动画支持WebP格式支持一个背景图像解压缩保证相同的URL不会下载几次保证伪url不会一次又一次重试保证主线程不会被阻塞表演!肾小球囊性肾病和弧Arm64支持注意:3.0版本SDWebImage不是完全向后兼容2.0,需要iOS 5.1.1最低部署版本。如果你需要iOS < 5.0版本,请使用最后一个2.0版本。
使用 SDWebImage 包括以下几个地方:
1:在 UITableView 上使用 UIImageView+WebCache
首先,在上面导入头文件 #import the UIImageView+WebCache.h ,然后在方法中调用 sd_setImageWithURL:placeholderImage: method from the tableView:cellForRowAtIndexPath: 的方法,用来异步加载图片进行缓存处理。
例如:
#import...
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *MyIdentifier = @"MyIdentifier";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:MyIdentifier] autorelease];
}
[cell.imageView sd_setImageWithURL:[NSURL URLWithString:@"http://www.domain.com/path/to/image.jpg"]
placeholderImage:[UIImage imageNamed:@"placeholder.png"]];
cell.textLabel.text = @"My Text";
return cell;
}
2: 在 block 块中使用
在 block 块中使用,你能在图像的检索成功与否已完成后,对图像的下载进度进行通知。
例如:
[cell.imageView sd_setImageWithURL:[NSURL URLWithString:@"http://www.domain.com/path/to/image.jpg"]
placeholderImage:[UIImage imageNamed:@"placeholder.png"]
completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {
... completion code here ...
}];
3:使用 SDWebImageManager
SDWebImageManager 是 UIImageView+WebCache 背后的一个类,关系异步下载图像缓存的存储。可以使用这个类直接受益于网络图片下载,在另一个上下文缓存UIView。
具体使用方法如下:
SDWebImageManager *manager = [SDWebImageManager sharedManager];
[manager downloadImageWithURL:imageURL
options:0
progress:^(NSInteger receivedSize, NSInteger expectedSize) {
// 进展跟踪代码
}
completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) {
if (image) {
// 做一些图片的处理
}
}];
4:使用独立的异步下载图片,用法上与上一个方法没用特别大的区别
SDWebImageDownloader *downloader = [SDWebImageDownloader sharedDownloader];
[downloader downloadImageWithURL:imageURL
options:0
progress:^(NSInteger receivedSize, NSInteger expectedSize) {
}
completed:^(UIImage *image, NSData *data, NSError *error, BOOL finished) {
if (image && finished) {
}
}];
5: 使用异步缓存图片
这个三方 也可以独立使用基于异步的图像缓存存储。SDImageCache维护一个内存缓存和一个可选的磁盘缓存。磁盘高速缓存异步执行写操作,所以它不添加不必要的延迟到UI。SDImageCache类提供了一个单例实例为了方便但是你可以如果你想创建自己的实例创建缓存名称空间分开。查询缓存,使用queryDiskCacheForKey::方法。如果这个方法返回nil,这意味着还没缓存到目前的图像。因此负责生成和缓存。是一个应用程序的缓存键图像缓存的惟一标识符。一般图像的绝对URL。
例如:
SDImageCache *imageCache = [[SDImageCache alloc] initWithNamespace:@"myNamespace"];
[imageCache queryDiskCacheForKey:myCacheKey done:^(UIImage *image) {
// 如果图片找到了,则不为空。
}];
默认情况下 SDImageCache 将查找磁盘缓存如果图像不能被发现在内存缓存中。您可以通过调用替代方法来避免这个问题的发生 imageFromMemoryCacheForKey: 。一个图像存储到缓存中,你可以使用 storeImage:forKey: 的方法:
[[SDImageCache sharedImageCache] storeImage:myImage forKey:myCacheKey];
默认情况下,图像将被存储在内存中缓存以及磁盘缓存(异步)。如果你想只有内存缓存,使用替代方法storeImage:forKey:toDisk: 不写第三个参数。
6: 缓存键过滤的使用
有时,你可能不希望使用图像URL缓存键,因为URL的一部分是动态的。SDWebImageManager 提供了一种方法来设置一个缓存键过滤NSURL作为输入,输出缓存键NSString。下面的示例应用程序中设置一个过滤器委托,将删除任何URL的查询字符串之前使用它作为一个缓存键:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
SDWebImageManager.sharedManager.cacheKeyFilter = ^(NSURL *url) {
url = [[NSURL alloc] initWithScheme:url.scheme host:url.host path:url.path];
return [url absoluteString];
};
return YES;
}