串行队列
- 特点:任务按照添加顺序依次执行,同一时间只有一个任务在执行。
- 应用场景:例如数据库的写入操作,为防止数据竞争,需要确保每次只有一个写入任务执行。假设一个APP需要将用户操作记录写入本地数据库,代码如下:
dispatch_queue_t serialQueue = dispatch_queue_create("com.example.serialQueue", DISPATCH_QUEUE_SERIAL);
dispatch_async(serialQueue, ^{
// 执行数据库写入操作
NSLog(@"写入操作开始");
// 模拟数据库写入耗时
sleep(2);
NSLog(@"写入操作完成");
});
并行队列
- 特点:可以同时执行多个任务,任务并发执行,但不一定按照添加顺序完成。
- 应用场景:适合大量数据的计算任务,如图片的批量处理。比如要对一组图片进行模糊处理,代码如下:
dispatch_queue_t concurrentQueue = dispatch_queue_create("com.example.concurrentQueue", DISPATCH_QUEUE_CONCURRENT);
NSArray *imagePaths = @[@"path1", @"path2", @"path3"];
for (NSString *path in imagePaths) {
dispatch_async(concurrentQueue, ^{
// 执行图片模糊处理
NSLog(@"开始处理图片 %@", path);
// 模拟图片处理耗时
sleep(1);
NSLog(@"完成处理图片 %@", path);
});
}
主队列
- 特点:在主线程上执行任务,是一个串行队列。主要用于更新UI等必须在主线程进行的操作。
- 应用场景:当从网络获取数据后更新UI。比如从网络获取用户信息后更新界面显示,代码如下:
dispatch_async(dispatch_get_main_queue(), ^{
// 更新UI操作
self.userNameLabel.text = @"新用户名";
});