美文网首页
SDWebImage肢解分析

SDWebImage肢解分析

作者: 踏云小子 | 来源:发表于2018-02-27 17:39 被阅读9次

    SDWebImageDownloader

    1.将operation加入到URLOperations(并发+barrier加锁方式)

    URLOperations是一个key是NSURL,value是NSOperation的字典
    为什么在URLOperations写入新值时,不要@synchronized而是并发队列+barrier?两者区别是什么?

    • @synchronized是同步锁,效率低
    • 并发队列+barrier
      image.png
    dispatch_queue_t queue = dispatch_queue_create("APP_TEST", DISPATCH_QUEUE_CONCURRENT);
    
    dispatch_async(queue, ^{
        NSLog(@"---1");
    });
    dispatch_async(queue, ^{
        NSLog(@"---2");
    });
    dispatch_async(queue, ^{
        NSLog(@"---3");
    });
    
    dispatch_barrier_sync(queue, ^{
        for (int i = 0; i < 50000; i ++) {
            if (i == 5000) {
                NSLog(@"p1");
            }else if (i == 6000){
                NSLog(@"p2");
            }else if (i == 7000){
                NSLog(@"p2");
            }
        }
        NSLog(@"barrier");
    });
    
    dispatch_async(queue, ^{
        NSLog(@"---4");
    });
    dispatch_async(queue, ^{
        NSLog(@"---5");
    });
    dispatch_async(queue, ^{
        NSLog(@"---6");
    });
    
    • 附注:
      iOS版本小于6.0需要手动释放dispatch_release(_barrierQueue);,正常ARC下不需要
      iOS版本小于6.0可以通过OS_OBJECT_USE_OBJC来判断,为0,则iOS<6.0

    SDWebImageDownloaderOperation

    1. 自定义一个线程(NSOperation)来下载图片
    • 附注:
      SDWebImageDownloaderSDWebImageDownloaderOperation解耦不是很好,他们共用了session,导致session对的delegate重复,为什么两者不能合并一起
    1. Image I/O的使用,以及优化

    相关文章

      网友评论

          本文标题:SDWebImage肢解分析

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