美文网首页iOS-源码分析iOS新知识
iOS面试题:SDWebImage实现原理是什么? 它是如何解决

iOS面试题:SDWebImage实现原理是什么? 它是如何解决

作者: Foxhoundsun | 来源:发表于2020-05-25 22:24 被阅读0次

解决tableView复用错乱问题

  • 每次都会调UIImageView+WebCache文件中的 [self sd_cancelCurrentImageLoad];

原理解释参考

SDWebImageDownloader

  • 图片的下载操作放在一个NSOperationQueue并发操作队列中,队列默认最大并发数是6
  • 每个图片对应一些回调(下载进度,完成回调等),回调信息会存在downloader的URLCallbacks(一个字典,key是url地址,value是图片下载回调数组)中,URLCallbacks可能被多个线程访问,所以downloader把下载任务放在一个barrierQueue中,并设置屏障保证同一时间只有一个线程访问URLCallbacks。,在创建回调URLCallbacks的block中创建了一个NSOperation并添加到NSOperationQueue中
  • 下载的核心是利用NSURLSession加载数据,每个图片的下载都有一个operation操作来完成,并将这些操作放到一个操作队列中,这样可以实现图片的并发下载。
  • 内存缓存的处理由NSCache对象实现,NSCache类似一个集合的容器,它存储key-value对,类似于nsdictionary类,我们通常使用缓存来临时存储短时间使用但创建昂贵的对象,重用这些对象可以优化新能,同时这些对象对于程序来说不是紧要的,如果内存紧张就会自动释放。
  • 先在内存中放置一份缓存,如果需要缓存到磁盘,将磁盘缓存操作作为一个task放到串行队列中处理,会先检查图片格式是jpeg还是png,将其转换为响应的图片数据,最后吧数据写入磁盘中(文件名是对key值做MD5后的串)。

相关文章

网友评论

    本文标题:iOS面试题:SDWebImage实现原理是什么? 它是如何解决

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