ios-SDWebImage知识点

默认的缓存时间是1个星期,一个星期过后会自动删除1个星期前的缓存对象。设置缓存时间,这个是保存在硬盘上的

_maxCacheAge = kDefaultCacheMaxCacheAge;
static const NSInteger kDefaultCacheMaxCacheAge = 60 * 60 * 24 * 7; 
如果保存在内存中,SDWebImage默认是用Cache来做的

使用缓存的对象,其中AutoPurgeCache是继承NSCache的。

_memCache = [[AutoPurgeCache alloc] init];

SDImageCache内处理内存警告,以通知的方式处理的,clearMemory

cleanDisk的执行的过程

先遍历所有的缓存文件,记录过期的文件,计算缓存文件的总大小

删除过期的文件

判断maxCacheSize的值是否>0,如果大于0再判断缓存的文件总大小是不是大于maxCacheSize

如果缓存文件的总大小超过了maxCacheSize,删除最早的文件。

SDWebImage的最大并发数是6,有一个_downloadQueue队列,在SDWebImageDownloader.m的init方法中进行初始化。

_downloadQueue = [NSOperationQueue new];
_downloadQueue.maxConcurrentOperationCount = 6;
SDWebImage是支持gif的

在SDWebImage中是怎么判断文件的类型的?

在NSData+ImageContentType.m文件中是根据第一个字节去判断的

+ (SDImageFormat)sd_imageFormatForImageData:(nullable NSData *)data {
    if (!data) {
        return SDImageFormatUndefined;
    }
    
    uint8_t c;
    [data getBytes:&c length:1];
    switch (c) {
        case 0xFF:
            return SDImageFormatJPEG;
        case 0x89:
            return SDImageFormatPNG;
        case 0x47:
            return SDImageFormatGIF;
        case 0x49:
        case 0x4D:
            return SDImageFormatTIFF;
        case 0x52:
            // R as RIFF for WEBP
            if (data.length < 12) {
                return SDImageFormatUndefined;
            }
            
            NSString *testString = [[NSString alloc] initWithData:[data subdataWithRange:NSMakeRange(0, 12)] encoding:NSASCIIString
            Encoding];
            if ([testString hasPrefix:@"RIFF"] && [testString hasSuffix:@"WEBP"]) {
                return SDImageFormatWebP;
            }
    }
    return SDImageFormatUndefined;
}
SDWebImage缓存文件的名称是根据md5来算的,为了防止缓存图片的名称的冲突,md5重复的几率很小。

当收到内存警告的时候,在appdelegate中可以进行如下操作

-(void)applicationDidReceiveMemoryWarning:(UIApplication *)application
{
     SDWebImageManager * manager=[SDWebImageManager sharedManager];
    //取消当前的所有下载操作
    [manager cancelAll];
    //清楚内存缓存
    [manager.imageCache clearMemory];
    
}





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值