关于SDWebImage

1 .SDWebImage的缓存策略

SDWebImage 的图片缓存默认情况采用的是 Memory 和 Disk 双重缓存机制。下载之前先去Memory中查找图片数据,找到直接返回使用;找不到再到Disk中查找图片数据,找到后放入Memory中再返回使用;如果Disk中也找不到再去下载图片;下载到图片后显示图片并将图片数据存到Memory和Disk中。
​​​

2. SDWebImage 缓存图片命名规则?

为了防止名称重复,对其进行 md5 运算

3.默认下载时长和默认缓存时长?

_maxCacheAge = kDefaultCacheMaxCacheAge;

static const NSInteger kDefaultCacheMaxCacheAge = 60 60 24 * 7; // 1 week

//下载时长
 15秒

4.磁盘清理时间点?

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(deleteOldFiles)
                                             name:UIApplicationWillTerminateNotification
                                           object:nil];

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(backgroundDeleteOldFiles)
                                             name:UIApplicationDidEnterBackgroundNotification
                                           object:nil];
分别在『应用被杀死时』和 『应用进入后台时』进行清理操作

5. SDWebImage的最大并发数是多少?

_downloadQueue.maxConcurrentOperationCount = 6

6.SDWebImage防止同一个url多次加载?

SDWebImageDownloader中有一个可变字典属性。

@property (strong, nonatomic) NSMutableDictionary *URLCallbacks;

通过下面的代码我们可以看出来字典中key是图片的url,value是一个可变数组,数组里面是一个一个的字典,每个字典中保存了下载过程回调和完成回调。每个字典相当于一次下载请求,但是只有第一次的下载请求才会真正去执行下载操作。这样就防止同一个url多次加载。

- (void)addProgressCallback:(SDWebImageDownloaderProgressBlock)progressBlock completedBlock:(SDWebImageDownloaderCompletedBlock)completedBlock forURL:(NSURL *)url createCallback:(SDWebImageNoParamsBlock)createCallback {
    // The URL will be used as the key to the callbacks dictionary so it cannot be nil. If it is nil immediately call the completed block with no image or data.
    if (url == nil) {
        if (completedBlock != nil) {
            completedBlock(nil, nil, nil, NO);
        }
        return;
    }
    dispatch_barrier_sync(self.barrierQueue, ^{
        BOOL first = NO;
        if (!self.URLCallbacks[url]) {
            self.URLCallbacks[url] = [NSMutableArray new];
            first = YES;
        }
        // Handle single download of simultaneous download request for the same URL
        NSMutableArray *callbacksForURL = self.URLCallbacks[url];
        NSMutableDictionary *callbacks = [NSMutableDictionary new];
        if (progressBlock) callbacks[kProgressCallbackKey] = [progressBlock copy];
        if (completedBlock) callbacks[kCompletedCallbackKey] = [completedBlock copy];
        [callbacksForURL addObject:callbacks];
        self.URLCallbacks[url] = callbacksForURL;
        //执行下载操作
        if (first) {
            createCallback();
        }
    });
}

在图片下载完成或者取消下载,根据url将URLCallbacks中的数组移除。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值