L的iOSUI笔记iOS点点滴滴

多线程之GCD

2015-04-19  本文已影响7523人  冷漠叻荭颜

Runloop

启动子线程的消息循环

GCD


队列和执行的几种情况

串行队列,同步任务 串行队列,异步任务 并发队列,异步任务 并发队列,同步任务 主队列,异步任务 主队列,同步任务 解决死锁
同步\异步 全局并行队列 手动创建串行队列 主队列
同步(sync) 没有开启新线程 串行执行任务 没有开启新线程 串行执行任务 会死锁
异步(async) 开启新线程 并行执行任务 开启新线程 并行执行任务 没有开启新线程 串行执行任务

同步任务

演示后台有依赖关系的耗时操作

全局队列

// 获取全局队列的函数
dispatch_get_global_queue(long identifier, unsigned long flags);

// 第一个参数 identifier
// 在iOS7中表示调度的优先级(让线程响应的更快还是更慢)
DISPATCH_QUEUE_PRIORITY_HIGH 2 高优先级
DISPATCH_QUEUE_PRIORITY_DEFAULT 0 默认优先级
DISPATCH_QUEUE_PRIORITY_LOW (-2) 低优先级
DISPATCH_QUEUE_PRIORITY_BACKGROUND INT16_MIN 后台优先级
// 在iOS8中表示服务质量
QOS_CLASS_USER_INTERACTIVE 用户希望线程快点执行完毕 不要使用耗时操作
QOS_CLASS_USER_INITIATED 用户需要的 不要使用耗时操作
QOS_CLASS_DEFAULT 默认
QOS_CLASS_UTILITY 耗时操作
QOS_CLASS_BACKGROUND 后台
QOS_CLASS_UNSPECIFIED 0 未指定优先级
// 为了在iOS7和iOS8中适配此参数 可以直接传入0
DISPATCH_QUEUE_PRIORITY_HIGH: QOS_CLASS_USER_INITIATED
DISPATCH_QUEUE_PRIORITY_DEFAULT: QOS_CLASS_DEFAULT
DISPATCH_QUEUE_PRIORITY_LOW: QOS_CLASS_UTILITY
DISPATCH_QUEUE_PRIORITY_BACKGROUND: QOS_CLASS_BACKGROUND

// 第二个参数 为将来保留使用 始终传入0

延时操作

// dispatch_after函数的定义
dispatch_after(dispatch_time_t when,
    dispatch_queue_t queue,
    dispatch_block_t block);
// dispatch_after的参数
// 参数1 dispatch_time_t when 多少纳秒之后执行
// 参数2 dispatch_queue_t queue 任务添加到哪个队列
// 参数3 dispatch_block_t block 要执行的任务
指定串行队列延时操作

一次性执行

一个方法只被执行一次 让dispatch_once执行在子线程上 dispatch_once是线程安全的

调度组Dispatch Group

下载歌曲,等所有的歌曲都下载完毕之后转到主线程提示用户
上一篇下一篇

猜你喜欢

热点阅读