iOS图片的异步加载

一开始接触到图片的加载是使用SDWebImage这个三方库, 然后就养成了惰性, 工作中一碰到网络图片的加载, 就毫不犹豫的把SDWebImage拖进来, 其实由于工程的使用限制, 往往导入了一大堆三方库文件, 真是有价值的就那么一个函数. 

最近查看公司工程源码, 导入的三方库是在太多, 当然也包括SDWebImage, 同样我查了一下, 这个库的真正用途就那么一个异步加载图片的函数. 于是就决定自己封装一个异步加载网络图片的类别.

UIImageView+MHImageWebCache.h  就一个api:

@interface UIImageView (MHImageWebCache)

/*!
 *  @author Macro QQ:778165728, 15-10-14
 *
 *  @brief  加载网络图片
 *
 *  @param urlStr    网络图片地址
 *  @param imageName 未加载时的占位图片
 */
- (void)setWebImageWithUrlStr:(NSString *)urlStr placeholderImageName:(NSString *)imageName;

@end 

 实现原理也很简单, 先把占位图片赋给UIImageView, 然后用GCD创建一个新的线程来异步加载图片, 加载图片数据就用最简单方法, NSData的远程加载方法:

+ (nullable instancetype)dataWithContentsOfURL:(NSURL *)url; 
加载完成之后, 就通知主线程(UI线程)修改UI, 我之前没考虑这点, 图片加载很长时间才显示出来....

// 通知主线程更新UI
dispatch_async(dispatch_get_main_queue(), ^{
    self.image = [UIImage imageWithData:imageData];
}); 
这样图片数据加载完成, 就会马上更新到UI上了~

源码下载



你可能感兴趣的:(iOS)