SDWebImage源码解读(一)

  • 1、 任务队列管理流程
    SD图片获取任务何时开启?何时结束?SD如何做到的?如下图所示


    任务队列开始与结束.png
  • a、缓存读取队列在任务获取的时候,就异步放到io串行队列


    image.png
  • b、图片downLoad任务由SDWebImageDownloader 使用 NSOperationQueue控制,加入队列之后,由队列根据 config配置依赖关系,确定任务执行先后顺序


    downLoad任务管理.png

    关于任务队列的内容,参见(知识点补充1)

  • c 任务取消
    同一个ImageView加载URL之前,如果加载过URL,先取消之前的加载任务,然后开启新的图片获取任务
    常见问题:SD tableView 快速滑动的时候,滑动过程中的所有cell图片都下载下来了么?
    答:没有,cell进去复用,上一个imageView尚未开启的任务将会取消


    任务取消.png

    2、UIView+webCache 如果实现对imageView上任务的取消?


    imageView任务取消.png
  • a、通过持有SDWebImageCombinedOperation 实现,持有通过NSMapTable弱引用对象实现,一旦Operation生命周期结束,将不在持有

  • b、Manager.runningOperation字典持有 SDWebImageCombinedOperation 对象,管理器生命周期


    生命周期管理.png

    当imageView加载图片 任务创建,将其加入字典;
    任务执行完成,从字典移除,queue释放


    生命周期管理代码.png

知识点补充:

1.NSOperation

我们知道,为了更好的提高用户体验,避免卡顿现象的发生,我们一般采用多线程的方式来进行用户体验上的提升。GCD、NSThread、NSOperation都能实现多线程。关于NSOperation的详细介绍,大家可以看下这篇文章:多线程之NSOperation简介,这里只做个简单的总结。

  • NSOperation有两个方法:main()start()。如果想使用同步,那么最简单方法的就是把逻辑写在main()中,使用异步,需要把逻辑写到start()中,然后加入到队列之中。
  • NSOperation什么时候执行呢?按照正常想法,是手动调用main()start(),当然这样也可以。当调用start()的时候,默认的是在当前线程执行同步操作,如果是在主线程调用了,那么必然会导致程序死锁。另外一种方法就是加入到operationQueue中,operationQueue会尽快执行NSOperation,如果operationQueue是同步的,那么它会等到NSOperation的isFinished等于YES后,再执行下一个任务,如果是异步的,通过设置maxConcurrentOperationCount来控制同时执行的最大操作,某个操作完成后,继续其他的操作。
  • 并不是调用了cancel就一定取消了,如果NSOperation没有执行,那么就会取消,如果执行了,只会将isCancelled设置为YES。所以,在我们的操作中,我们应该在每个操作开始前,或者在每个有意义的实际操作完成后,先检查下这个属性是不是已经设置为YES。如果是YES,则后面操作都可以不用再执行了
    参考链接:SDWebImageDownloader:https://www.cnblogs.com/LeeGof/p/6914267.html

2、NSSet与NSArray的区别与联系

1、NSSet无序 NSArray有序
2、NSSet 采用hash存储
3、用法相似

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,937评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,503评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,712评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,668评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,677评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,601评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,975评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,637评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,881评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,621评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,710评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,387评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,971评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,947评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,189评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,805评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,449评论 2 342

推荐阅读更多精彩内容