SDWebImage的一些使用技巧

转载于:http://www.jianshu.com/p/dabc0c6d083e 作者:hosea_zhou(简书作者)

SDWebImage作为目前最受欢迎的图片下载第三方框架,使用率很高。很多时候在网络网络状态为WiFi时,显示图片高清图;网络状态为蜂窝移动网络时,显示图片缩略图。

由于要监听网络状态,可以使用RealReachability与AFNetWorking,这两个都是在Github获得大量star的第三方开源框架,在这里主要讲AFNetWorking。
我们利用cocoaPods导入第三方框架AFNetWorking到项目中。
在AppDelegate.m文件中的application:didFinishLaunchingWithOptions:方法中监听网络状态。

// AppDelegate.m 文件中
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
  // 监控网络状态 
  [[AFNetworkReachabilityManager sharedManager] startMonitoring];}
  // 以下代码在需要监听网络状态的方法中使用        
  AFNetworkReachabilityManager *mgr = [AFNetworkReachabilityManager  sharedManager];
  if (mgr.isReachableViaWiFi) { 
  // 在使用Wifi, 下载原图 
  } else { 
  // 其他,下载小图
  } 
}

但因机制原因,实际中下载图片的操作是这样的

- setItem:(CustomItem *)item{ 
  _item = item; 
  // 占位图片 
  UIImage *placeholder = [UIImage imageNamed:@"placeholderImage"]; 
  // 从内存\沙盒缓存中获得原图 
  UIImage *originalImage = [[SDImageCache sharedImageCache] imageFromDiskCacheForKey:item.originalImage];
   if (originalImage) { // 如果内存\沙盒缓存有原图,那么就直接显示原图(不管现在是什么网络状态) self.imageView.image = originalImage; 
   } 
   else { 
  // 内存\沙盒缓存没有原图 
  AFNetworkReachabilityManager *mgr = [AFNetworkReachabilityManager sharedManager];
  if (mgr.isReachableViaWiFi) { // 在使用Wifi, 下载原图     
  [self.imageView sd_setImageWithURL:[NSURL URLWithString:item.originalImage] placeholderImage:placeholder]; 
  } 
  else if (mgr.isReachableViaWWAN) { // 在使用手机自带网络 // 用户的配置项假设利用NSUserDefaults存储到了沙盒中 
    // [[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"alwaysDownloadOriginalImage"]; 
    // [[NSUserDefaults standardUserDefaults] synchronize];
    #warning 从沙盒中读取用户的配置项:在3G\4G环境是否仍然下载原图 
    BOOL alwaysDownloadOriginalImage = [[NSUserDefaults standardUserDefaults]   boolForKey:@"alwaysDownloadOriginalImage"];
    if (alwaysDownloadOriginalImage) { 
      // 下载原图 
      [self.imageView sd_setImageWithURL:[NSURL URLWithString:item.originalImage] placeholderImage:placeholder]; 
     } 
     else { 
      // 下载小图 
      [self.imageView sd_setImageWithURL:[NSURL URLWithString:item.thumbnailImage] placeholderImage:placeholder];   } 
  } else { 
    // 没有网络
    UIImage *thumbnailImage = [[SDImageCache sharedImageCache] imageFromDiskCacheForKey:item.thumbnailImage]; 
      if (thumbnailImage) { 
        // 内存\沙盒缓存中有小图 
        self.imageView.image = thumbnailImage; 
      } 
      else { 
        // 处理离线状态,而且有没有缓存时的情况 
        self.imageView.image = placeholder; 
      } 
    } 
  }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,225评论 4 61
  • SDWebImage作为目前最受欢迎的图片下载第三方框架,使用率很高。但是你真的会用吗?本文接下来将通过例子分析如...
    挡不住的狮子阅读 5,150评论 0 4
  • 完全想不到,笑来老师会用三个脑来解释执行力差的根源!自己昨天的猜测跟这个相比,如果老师探测的是内核,那自己的简直就...
    大喵和咸鱼阅读 2,271评论 0 2
  • 这两天一直想写一个内容,说说每个创业之人身边的几类人,处于懒癌,处于文字匮乏,无从下手,所以时间一拖在拖 今晚YY...
    一诺千金的刘一诺阅读 2,312评论 0 0
  • 她死在那一夜 红色的烛光摇摆不定的闪烁着,光芒在她的脸庞间跳跃,像一只红色的蝴蝶在花丛中飞舞。门外嘶喊声无数,是那...
    无明回忆录阅读 2,844评论 0 1