最近项目中做了一个小功能,抽时间把它实现过程整理下来,以供交流学习:
首先加载图片都会利用SDWebImage强大的控件来加载并自带缓存功能,利用类别来对UIImageView进行方法补充,实际上就是对SDWebImage的再一次封装。
#import "UIImageView+MyImageModel.h"
#import "UIImageView+WebCache.h"
#import "AFNetworking.h"
@implementation UIImageView (MyImageModel)
-(void)my_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)holder
{
NSString *urlStr = [url absoluteString];
//读缓存,先从磁盘中或内存中读取
UIImage *originalImage = [[SDImageCache sharedImageCache] imageFromDiskCacheForKey:urlStr];
if (originalImage)
{//已经加载过有缓存,直接显示,无需判断网络状态
self.image = originalImage;
}
else
{//利用网络监测判断网络
AFNetworkReachabilityManager *reachability = [AFNetworkReachabilityManager sharedManager];
if ( reachability.isReachableViaWiFi)
{//WiFi网络下下载原图
[self sd_setImageWithURL:url placeholderImage:holder options:SDWebImageRetryFailed | SDWebImageLowPriority];
}
else if (reachability.isReachableViaWWAN)
{//手机自带网络
if (ImageModel)//手机自带网络,
{//仅WiFi网络下载图片开关打开
//读内存是否加载过,下面
[[SDWebImageManager sharedManager] cachedImageExistsForURL:url completion:^(BOOL isInCache) {
if (isInCache)
{//直接加载,如果在磁盘或内存中存在就继续加载会直接读取,不会有网络请求
[self sd_setImageWithURL:url placeholderImage:holder options:SDWebImageRetryFailed | SDWebImageLowPriority];
}
else
{
//没加载过占位图
self.image = holder;
}
}];
}
else//非wifi网络也可以下载图片
{
[self sd_setImageWithURL:url placeholderImage:holder options:SDWebImageRetryFailed | SDWebImageLowPriority];
}
}
else
{//无网络
self.image = holder;
}
}
}
@end