面试题答案
一键面试在Objective-C中,GCD(Grand Central Dispatch)主要有以下几种类型的队列:
- 主队列(Main Queue):
- 特点:
- 是应用程序的主线程对应的队列,在主线程上执行任务。
- 是串行队列,任务会按顺序依次执行。
- 与用户界面(UI)操作紧密相关,UIKit框架中大多数操作必须在主队列中执行,以确保线程安全和UI的一致性。
- 适用场景:更新UI,如刷新视图、修改视图属性、处理用户交互事件(如按钮点击)等操作,因为这些操作需要在主线程上执行,以保证界面的流畅性和响应性。
- 特点:
- 全局队列(Global Queue):
- 特点:
- 是系统提供的并发队列,有不同优先级(高、默认、低、后台)的全局队列可供使用。
- 系统会根据设备的CPU核心数和负载情况自动管理这些队列中的任务并发执行数量。
- 所有全局队列都是并发队列,多个任务可以同时执行(但不一定是真正的并行,取决于CPU核心数等因素)。
- 适用场景:适合执行一些计算密集型或I/O操作,且不需要在主线程执行的任务,如网络请求、文件读写、数据处理等。例如,下载图片、解析JSON数据等任务可以在全局队列中执行,以避免阻塞主线程。
- 特点:
- 自定义队列(Custom Queue):
- 特点:
- 可以通过
dispatch_queue_create
函数创建,可以指定队列是串行还是并发。 - 串行自定义队列中任务按顺序依次执行,并发自定义队列则可以根据系统资源情况并发执行多个任务。
- 开发者可以根据具体需求灵活控制任务的执行顺序和并发策略。
- 可以通过
- 适用场景:
- 当需要控制一组任务的执行顺序,并且不希望在主队列执行时,可以使用串行自定义队列。例如,有一系列数据库操作,需要依次执行以保证数据一致性,就可以使用串行自定义队列。
- 当有一组相互独立的任务,需要并发执行以提高效率,同时又不适合使用全局队列(比如需要更细粒度的控制并发数量等情况),可以使用并发自定义队列。例如,批量处理图片的操作,可以用并发自定义队列来提高处理速度。
- 特点: