//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];
});
});