SDWebImage 常用方法

SDWebImage是iOS中一款处理图片的框架, 使用它提供的方法, 一句话就能让UIImageView自动去加载并显示网络图片。特别是在UITableViewCell中有UIImageView需要显示来自网络的图片。SDWebImage会自动去管理这些图片, 包括缓存到内存和缓存到磁盘等等。包括gif图片的显示也是轻松完成。本文主要分享除了基本方法以外的一些其他给力方法。

图片下载

图片下载有两种方式。

1
2 3 4 5 6 7 8 9 10 11 12 13 
// 方法1: [[SDWebImageDownloader sharedDownloader] downloadImageWithURL:url options:0 progress:^(NSInteger receivedSize, NSInteger expectedSize) {  // 下载进度block  } completed:^(UIImage *image, NSData *data, NSError *error, BOOL finished) {  // 下载完成block }];  // 方法2: [[SDWebImageManager sharedManager] downloadImageWithURL:url options:0 progress:^(NSInteger receivedSize, NSInteger expectedSize) {  // 下载进度block  } completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) {  // 下载完成block }]; 

以上两个方法可以下载图片,但是肯定是有差别的。相同点就不详细说了,都提供下载进度回调和下载完成回调,主要说说不同点。

  • 方法1和方法2是两个不同的类,方法1(SDWebImageDownloader)只下载图片,不管理图片,不会缓存图片到内存和本地。方法2(SDWebImageManager) 既下载图片,又管理图片。其实方法2内部也是调用的方法1。只不过方法2会缓存图片,并且管理下载队列。
  • 下载完成之后的回调传递的参数不一样,方法1会将图片的NSData数据和传过来,而方法2只传递了image对象。
  • 方法1的completed回调不是在主线程,如果需要在主线程做事情,得手动回到主线程。方法2的completed回调是主线程,在做进一步处理时就不用再手动回到主线程了。

图片存储(SDImageCache类)

可以将手动将图片通过SDWebImage存储,由SDWebImage统一管理。

1
2 3 4 5 6 7 8 9 10 11 12 13 
/**  * 方法1  * @param key 图片的url路径  * @param toDisk 是否要缓存到磁盘  */ - (void)storeImage:(UIImage *)image forKey:(NSString *)key toDisk:(BOOL)toDisk;  /**  * 方法2  * @param recalculate 是否需要将image转换为data  * @param imageData 图片的NSData对象  */ - (void)storeImage:(UIImage *)image recalculateFromImage:(BOOL)recalculate imageData:(NSData *)imageData forKey:(NSString *)key toDisk:(BOOL)toDisk; 

以上是两个比较有代表性的方法

  • 方法1只能存储png或者jpg图片,不能存储gif图片,方法内部会对image对象进行转换,然后写到本地。
  • 方法2就比较给力了,因为提供了imageData参数,可以将图片的NSData对象传过去,什么类型的图片都可以存储。这里需要注意的是,如果提供了imageData, 那么recalculate传递NO就可以了, 方法内部就不会再拿UIImage对象去转换成NSData对象了了。

获取缓存图片的路径

有时候可能需要拿到缓存图片的路径做做一些事情,SDWebImage也提供了相应的方法。

1
2 
// url是图片的网络路径 NSString *imageCachePath = [[SDImageCache sharedImageCache] defaultCachePathForKey:url]; 

获取缓存图片

1
2 
// url是图片的网络路径 UIImage *image = [[SDImageCache sharedImageCache] imageFromDiskCacheForKey:src]; 

调用这个方法时,SDImageCache会先到内存中查找图片,如果没找到,再到磁盘上找。

获取缓存占用空间

1
[[SDImageCache sharedImageCache] getSize]; 

这个方法会直接返回通过SDWebImage缓存的图片,在磁盘上占用的空间。

其他给力方法

1
2 3 4 5 6 7 8 9 
@interface UIImage (MultiFormat) // 这个方法牛逼的地方在于,能加载gif图片。会根据data的类型采用不同的加载方法 + (UIImage *)sd_imageWithData:(NSData *)data; @end  @interface NSData (ImageContentType) // 根据data拿到图片的后缀,形如@"image/jpeg",@"image/png",@"image/gif" + (NSString *)sd_contentTypeForImageData:(NSData *)data; @end 

Done!

 

你可能感兴趣的:(SDWebImage 常用方法)