美文网首页iOS面试iOSiOS Developer
有关 SDWebImage 框架的一些细节

有关 SDWebImage 框架的一些细节

作者: Senjougahara | 来源:发表于2017-02-09 18:40 被阅读287次
    1. Q:SDWebImage 下载图片的最大并发数量为多少?

    A:6

    • SDWebImageDownloader.m文件中的init方法的下面一行代码给了答案
    _downloadQueue.maxConcurrentOperationCount = 6;
    
    2. Q:SDWebImage 下载队列的处理方式?

    A:FIFO 的队列处理方式(先进先出)

    • 同样也是在init方法中
    _executionOrder = SDWebImageDownloaderFIFOExecutionOrder;
    
    3. Q:SDWebImage 框架中的缓存文件名字是如何命名的?

    A:通过图片的 URL 地址,将地址进行MD5加密,然后将加密得到的一串字符作为图片的名字。

    4. Q:SDWebImage 框架内部是如何处理内存警告的?

    A:通过监听通知的方式清理缓存

    • SDWebImageCache.m文件中的- dealloc方法注册一个通知中心
    - (void)dealloc
    {
        [[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationDidReceiveMemoryWarningNotification object:nil];
    
    }
    

    当这个通知接受到内存警告时会直接removeAllObjects

    5. Q:SDWebImage 框架是如何判断图片类型的(GIF or PNG…)?

    A:匹配图片的第一个字节的二进制码,然后进行图片类型判断

    • NSData+ImageContentType.m文件中
    [data getBytes:&c length:1];
       switch (c) {
            case 0xFF:
                return @"image/jpeg";
            case 0x89:
                return @"image/png";
            case 0x47:
                return @"image/gif";
            case 0x49:
            case 0x4D:
                return @"image/tiff";
            case 0x52:
                // R as RIFF for WEBP
                if ([data length] < 12) {
                    return nil;
                }
    

    先将下载的图片解码,然后匹配该图片第一个字节的二进制码,最后return该图片的类型

    6. Q:SDWebImage 框架是如何下载图片的?

    A:发送网络请求下载图片,主要是使用NSURLSession

    • SDWebImageDownloaderOperation.m文件中的- start方法创建了一个NSURLSession对象
    self.ownedSession = [NSURLSession sessionWithConfiguration:sessionConfig
                                                         delegate:self
                                                    delegateQueue:nil];
    

    下载图片主要是通过下面的一个代理方法(NSURLSessionDataDelegate)实现的,创建一个NSMutableData的对象将服务器请求到的数据一点一点拼接起来

    self.imageData = [[NSMutableData alloc] initWithCapacity:expected];
    self.response = response;
    

    相关文章

      网友评论

      • charlotte2018:sdwebimage,现在变为session下载图片了,之前是connecttion

      本文标题:有关 SDWebImage 框架的一些细节

      本文链接:https://www.haomeiwen.com/subject/btdwittx.html