ios学习笔记——GCD简介
1、调度队列
调度队列是一种非常简单的方式来执行应用程序中的异步喝并发的任务。一个任务只是一些你的应用程序中需要执行的工作。
调度队列是一个先进先出的数据结构,因此,您添加到队列中的任务总是以相同的数序开始启动的。
调度队列的类型:
1)串行队列:在一个时间里,一次只执行一个添加到队列中的任务。通常用于对特定资源进行同步访问。
2)并行队列:同时执行一个或多个任务,但任务仍以他们被添加到队列中的顺序启动。当前正在执行的任务在调度队列管理的不同的线程上运行。在任何给定的点上执行的任务的确切数码是可变的,并取决于系统条件。
3)主队列:主调度队列是一个全局可用的串行队列,在应用程序的主线程上执行任务。
操作队列的优点:
1)调度队列让你专注于你想要的工作,而不必担心线程的创建和管理。
2)系统为您处理所有的线程创建和管理,该系统比任何单一的应用程序更有效地管理线程的效率。
3)他可以根据现有的资源和当前系统情况动态地扩展线程的数量。
4)该系统通常能够更快速的运行任务比自己创建线程。
2、创建和管理调度队列
获取全局并发队列
1 dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
系统为我们提供了四种并发队列,我们使用dispatch_get_global_queue来获取并发队列:
DISPATCH_QUEUE_PRIORITY_HIGH
DISPATCH_QUEUE_PRIORITY_DEFAULT
DISPATCH_QUEUE_PRIORITY_LOW
DISPATCH_QUEUE_PRIORITY_BACKGROUND
虽然调度队列是引用计数的对象,但不需要保留喝释放全局并发队列。
创建串行队列
1 dispatch_queue_t queue = dispatch_queue_create("sjz", NULL);
当我们需要按照一定顺序执行任务时,我们就应该使用串行队列。有时我们需要保护共享资源时,我们可以考虑用串行队列来替换锁。与锁不同的是,一个串行队列确保任务在一个可预测的顺序执行,并且不会死锁。
3、调度队列的内存管理
调度队列和其他调度对象是引用计数的数据类型。当你创建一个串行队列时,它的引用技术为1。
可以使用dispatch_retain 和 dispatch_release方法来增加和减少引用计数。
当一个队列引用技术为零时,系统异步释放队列。
需要注意的是:你不需要保留或释放任何全局调度队列,包括并发调度队列或主队列。