SDWebImage基本使用和内部细节

SDWebImage基本使用

// 引入相关头文件
#import "UIImageView+WebCache.h"
#import "SDWebImageManager.h"
#import "SDWebImageDownloader.h"
#import "UIImage+GIF.h"

// 1.下载图片且可以获取下载进度,内存缓存&磁盘缓存
-(void)download
{
    [self.imageView sd_setImageWithURL:[NSURL URLWithString:@"imagUrl"] placeholderImage:[UIImage imageNamed:@"placeholderName"] options:SDWebImageCacheMemoryOnly | SDWebImageProgressiveDownload progress:^(NSInteger receivedSize, NSInteger expectedSize) {

    } completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {

        switch (cacheType) {
            case SDImageCacheTypeNone:
                NSLog(@"直接下载");
                break;
            case SDImageCacheTypeDisk:
                NSLog(@"磁盘缓存");
                break;
            case SDImageCacheTypeMemory:
                NSLog(@"内存缓存");
                break;
            default:
                break;
        }
    }];

    // 存放目录
    NSLog(@"%@",[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject]);

}

// 2.只需要简单获得一张图片,可不设置显示,内存缓存&磁盘缓存
-(void)download2
{
    [[SDWebImageManager sharedManager] downloadImageWithURL:[NSURL URLWithString:@"imagUrl"] options:0 progress:^(NSInteger receivedSize, NSInteger expectedSize) {
        NSLog(@"%f",1.0 * receivedSize / expectedSize);

    } completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) {

        // 得到图片
        self.imageView.image = image;
    }];
}

// 3.没有做任何缓存处理
-(void)download3
{
    // data:图片的二进制数据
    [[SDWebImageDownloader sharedDownloader] downloadImageWithURL:[NSURL URLWithString:@"imagUrl"] options:0 progress:^(NSInteger receivedSize, NSInteger expectedSize) {

    } completed:^(UIImage *image, NSData *data, NSError *error, BOOL finished) {

        [[NSOperationQueue mainQueue]addOperationWithBlock:^{
             self.imageView.image = image;
        }];

    }];
}

// 4.播放Gif图片
-(void)gif
{   
    UIImage *image = [UIImage sd_animatedGIFNamed:@"gifImagName"];
    self.imageView.image = image;
}

SDWebImage内部细节

// 内存警告
-(void)applicationDidReceiveMemoryWarning:(UIApplication *)application
{
    // 1.清空缓存
    // clearDisk方法:直接删除缓存目录下面的文件,然后重新创建空的缓存文件
    // cleanDisk方法:清除过期缓存,计算当前缓存的大小,和设置的最大缓存数量比较,如果超出那么会继续删除(按照文件了创建的先后顺序)
    // 默认过期时间:7天
    [[SDWebImageManager sharedManager].imageCache clearMemory];

    // 2.取消当前所有的操作
    [[SDWebImageManager sharedManager] cancelAll];

    // 3.图片下载最大并发数量  6个
    _downloadQueue.maxConcurrentOperationCount = 6;

    // 4.缓存文件的保存名称如何处理? 
    //   拿到图片的URL路径,对该路径进行MD5加密

    // 5.该框架内部对内存警告的处理方式? 
    //   内部通过监听UIApplicationDidReceiveMemoryWarning通知的方式清除缓存

    // 6.该框架进行缓存处理的方式:使用NSCache(和字典的用法差不多)

    // 7.如何判断图片的类型: 在判断图片类型的时候,只匹配第一个字节
    // #import "NSData+ImageContentType.h"
    -(void)type
    {
        NSData *imageData = [NSData dataWithContentsOfFile:@"imagePath.png"];
        NSString *typeStr = [NSData sd_contentTypeForImageData:imageData];
        NSLog(@"%image type = @", typeStr);
    }

    // 8.队列中任务的处理方式:FIFO

    // 9.如何下载图片的? 
    // 发送网络请求下载图片, 老版本SDWebImage使用NSURLConnection,新版本使用的是NSURSession
    // 使用它们的代理方法如: didReveiveData方法,回调显示下载结果和下载进度

    // 10.默认请求超时的时间: 15秒    
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章