GCD总结

作者: 高乔人 | 来源:发表于2018-04-22 13:49 被阅读6次

 //1.创建队列

    //第一个参数为标识  写什么都可以

    //第二个参数为 并发队列 (队列的类型)  DISPATCH_QUEUE_SERIAL为串行队列

    dispatch_queue_t  queue =  dispatch_queue_create("XHWGCD", DISPATCH_QUEUE_CONCURRENT);

    //2.创建任务

    dispatch_async(queue, ^{

        NSLog(@"%@",[NSThread currentThread]);

    });

先写到这里,出去买包烟,

//!异步函数+主队列不会开启线程   

//同步函数 +主队列 会产生死锁

dispatch_sync(dispatch_get_main_queue(), ^{

        NSLog(@"%@",[NSThread currentThread]);

    });

    dispatch_sync(queue, ^{

        NSLog(@"%@",[NSThread currentThread]);

    });

    //只会执行到这里

    NSLog(@"---start---");

    dispatch_sync(queue, ^{

        NSLog(@"%@",[NSThread currentThread]);

    });

    //这里不会执行

     NSLog(@"---start---");

//怎么才能不让产生死锁呢,可以将同步+主队列这个方法 放到一个其他线程中去执行

比如:[NSThread detachNewThreadSelector:@selector(syncMain) toTarget:self withObject:nil]; 

//开一个线程 

- (void)syncMain{

//在这里执行 ,就不会产生死锁了

}

 //GCD 实现线程间的通信 举例:下载图片

  //GCD 实现线程间的通信 举例:下载图片

    dispatch_async(dispatch_get_global_queue(0, 0), ^{

        NSURL *url = [NSURL URLWithString:@"http://a.hiphotos.baidu.com/image/h%3D300/sign=c43e07f052df8db1a32e7a643922dddb/0ff41bd5ad6eddc4c984b29335dbb6fd52663372.jpg"];

        //转换二进制

        NSData*data = [NSDatadataWithContentsOfURL:url];

        //转换图片

        UIImage*image = [UIImageimageWithData:data];

        dispatch_async(dispatch_get_main_queue(), ^{

            //刷新UI

            self.imageView.image= [UIImageimageNamed:image];

        });

    });

相关文章

网友评论

      本文标题:GCD总结

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