MST

星途 面试题库

面试题:Objective-C中GCD的队列类型及应用场景

请简述Objective-C中GCD(Grand Central Dispatch)提供的几种队列类型(如串行队列、并行队列、主队列),并举例说明每种队列适用的应用场景。
11.4万 热度难度
编程语言Objective-C

知识考点

AI 面试

面试题答案

一键面试

串行队列

  • 特点:任务按照添加顺序依次执行,同一时间只有一个任务在执行。
  • 应用场景:例如数据库的写入操作,为防止数据竞争,需要确保每次只有一个写入任务执行。假设一个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 = @"新用户名";
});