SDWebImage的实现原理(UIImageView+WebCach)

1.作用:

SDWebImageView的功能很强大,其中UIImageView+WebCach.h的功能主要是下载图片,设置图片缓存.

2.原理:

下载图片的原理:通过图片的网站地址URL异步下载图片;

缓存图片的原理:下载完成的图片会被保存的内存和文件中;加载图片的时候首先会到内存中去找图片,如果没有就到文件中找,再没有才下载图片。

3.用法:

导入第三方库SDWebImage

头文件:UIImageView+webCache.h

主要语句:

[cell.posterImage sd_setImageWithURL:[NSURL URLWithString:album.poster]placeholderImage:[UIImage imageNamed:@"s0"]];

4.例子:使用album中的图片地址字符串,加载图片到UITableViewCell上。

不用SDWebImageView的方法:

@property(nonatomic,strong)NSMutableDictionary *imageMutableDic;

    NSData *readData = self.imageMutableDic[album.poster];
    if(readData)
    {
        cell.posterImage.image = [UIImage imageWithData:readData];
    }
    else
    {
        NSString *filePath = [self generateFilePath:album.poster];
        NSData *dataFromFile = [NSData dataWithContentsOfFile:filePath];
        if(dataFromFile)
        {
            cell.imageView.image = [UIImage imageWithData:filePath];
            self.imageMutableDic[album.poster] = dataFromFile;
        }
        else
        {
            //异步下载图片,主线程加载,正确
            //手动实现多级缓存(滑动的时候需要重新下载)
            [self downloadImageViewCell:cell withAlbum:album];
            [dataFromFile writeToFile:filePath atomically:YES];
            self.imageMutableDic[album.poster] = dataFromFile;
        }
    }
    
//异步下载图片的方法
- (void)downloadImageViewCell:(MXTableViewCell*)cell withAlbum:(MXAlbum *)album
{
    dispatch_queue_t globalQueue = dispatch_get_global_queue(0, 0);
    dispatch_async(globalQueue, ^{
        NSString *imageStr = album.poster;
        NSURL *url = [NSURL URLWithString:imageStr];
        NSData *imageData = [NSData dataWithContentsOfURL:url];
        
        dispatch_async(dispatch_get_main_queue(), ^{
            cell.posterImage.image = [UIImage imageWithData:imageData];
        });
    });
}

//找文件的路径
- (NSString *)generateFilePath:(NSString *)imageURLStr
{
    NSString *cachesPath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)firstObject];
    NSString *imageName = [imageURLStr lastPathComponent];
    return [cachesPath stringByAppendingPathComponent:imageName];
}

采用SDWebImage的方法

(1)导入三方库SDWebImage

(2)导入头文件

#import "UIImageView+WebCache.h"

(3)一句话搞定

[cell.posterImage sd_setImageWithURL:[NSURL URLWithString:album.poster]placeholderImage:[UIImage imageNamed:@"s0"]];
时间: 2024-10-14 00:54:07

SDWebImage的实现原理(UIImageView+WebCach)的相关文章

SDWebImage底层实现原理

SDWebImage底层实现有沙盒缓存机制,主要由三块组成 1.内存图片缓存2.内存操作缓存3.磁盘沙盒缓存 内部实现过程:第一步,下载SDWebImage,导入工程. 第二步,在需要的地方导入头文件 1 #import "UIImageView+WebCache.h" 第三步,调用sd_setImageWithURL:方法缓存图片,注意,这就是新版本的新方法,旧方法是setImageWithURL:.下面将几个方法都介绍一下. 1. sd_setImageWithURL: 1 //图

转 SDWebImage使用及原理

SDWebImage托管在github上.https://github.com/rs/SDWebImage 这个类库提供一个UIImageView类别以支持加载来自网络的远程图片.具有缓存管理.异步下载.同一个URL下载次数控制和优化等特征. 使用示范的代码: UITableView使用UIImageView+WebCache类(基本应用,UIImageView的一个category) 前提#import导入UIImageView+WebCache.h文件,然后在tableview的cellFo

SDWebImage的实现原理

一.SDWebImage库的作用: 它主要是通过对UIImageView的类别(分类)扩展来实现异步加载替换图片的工作. 二.主要用到的对象: 1.UIImageView + WebCache :入口封装,实现读取图片完成后的回调工作: 2.SDWebImageManager: 记录那些图片正在读取,对图片进行管理的中转站: 调用SDImageCache向下层读取Cache,调用SDWebImageDownloader向网络读取对象: 实现SDImageCache 和 SDWebImageDow

IOS SDWebImage实现原理详解

在之前我写过SDWebImage的使用方法,主要是用与获取网络图片,没有看过的朋友可以看看. 这篇文章将主要介绍SDWebImage的实现原理,主要针对于获取网络图片的原理,如果没有第三方我们该怎么去做,当然我知识用文字去介绍,我想花大把的时间去深入理解我们用不到的东西,是很不值得的,不过兴趣的朋友可以去其他博客上查找相应信息,毕竟学无止境.好了下面开始进入正题. 1)当我门需要获取网络图片的时候,我们首先需要的便是URl没有URl什么都没有,获得URL后我们SDWebImage实现的并不是直接

iOS利用SDWebImage图片下载缓存

一.我们先来了解一下SDWebImage的使用: 1.导入框架,引入头文件: #import "UIImageView+WebCache.h" 也可以直接使用CocoaPods来引入和管理 (OC 如下) platform :ios, '7.0' pod 'SDWebImage', '~>3.8' (swift)并且要确保添加了use_frameworks,iOS版本为8.0+ platform :ios, '8.0' use_frameworks! 2.图片下载并缓存方法: /

SDWebimage 、AFN 、ASI ----- 快捷使用

1.SDWebimage 1> SDWebimage的缓存机制 UIImageView+WebCache: setImageWithURL:placeholderImage:options: 先显示 placeholderImage ,同时由SDWebImageManager 根据 URL 来在本地查找图片. SDWebImageManager: downloadWithURL:delegate:options:userInfo: SDWebImageManager是将UIImageView+W

SDWebImage源码解析之SDWebImageManager的注解

http://www.cocoachina.com/ios/20150612/12118.html 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70

开源框架:SDWebImage

http://blog.csdn.net/uxyheaven/article/details/7909373 SDWebImage是我搞iOS以来少数佩服的框架,膜拜一下作者.真的写的非常棒! 这套开源框架还是蛮重要的, 涉及到异步加载图片源和自动缓存. 我们如果能够熟练使用其API 就可以实现很多复杂的需求了. 作者依旧在更新,目前3.0 版本已经非常强大! 简化了更多API接口.加强了下载类,支持多个文件同时下载,内置了下载进度功能.等 github托管地址如下: https://githu

SDWebImage异步下载和缓存的源码剖析

前言: 在移动app开发过程中,考虑到手机流量.网速以及内存等因素,当我们的app需要频繁的访问网络时,对网络优化这块的要求就显得尤为重要. 比如某个app需要经常重复显示很多张网络图片的时候,如果在每次需要显示同一张网络图片,都要访问网络进行下载操作,那就显得很不合理了. 因为那样会相当耗时,且耗流量.这就需要对已下载好的网络图片进行缓存操作. 我目前开发的一个项目属于展示类app,一个需要频繁处理网络图片的应用,涉及复杂的异步下载和异步缓存等处理. 在使用SDWebImage类库进行网络图片