举例说明
时间: 2024-02-15 12:05:50 浏览: 128
示例
假设我们有一个需求,需要在后台线程中下载多个图片,然后在主线程中将这些图片展示出来。我们可以使用 GCD 创建一个串行队列来实现这个需求。具体代码如下:
```
// 创建串行队列
dispatch_queue_t queue = dispatch_queue_create("com.example.imagequeue", NULL);
// 添加任务到队列中
dispatch_async(queue, ^{
// 下载第一个图片
UIImage *image1 = [self downloadImageWithURL:url1];
// 回到主线程展示图片
dispatch_async(dispatch_get_main_queue(), ^{
imageView1.image = image1;
});
});
dispatch_async(queue, ^{
// 下载第二个图片
UIImage *image2 = [self downloadImageWithURL:url2];
// 回到主线程展示图片
dispatch_async(dispatch_get_main_queue(), ^{
imageView2.image = image2;
});
});
dispatch_async(queue, ^{
// 下载第三个图片
UIImage *image3 = [self downloadImageWithURL:url3];
// 回到主线程展示图片
dispatch_async(dispatch_get_main_queue(), ^{
imageView3.image = image3;
});
});
```
在上面的代码中,我们创建了一个串行队列,然后向队列中添加了三个任务,每个任务都是下载一个图片,并在主线程中将该图片展示出来。由于是串行队列,每个任务都会等待上一个任务执行完成后再执行,因此可以保证图片的展示顺序是依次进行的。同时,由于在主线程中执行了 UI 相关的操作,我们需要使用 `dispatch_async(dispatch_get_main_queue())` 将这些操作放到主线程中进行。
阅读全文