被伤过才知道自己的不足,被虐过才知道学习。
今天我想分享一下自己对于dispatch的一些认知。
曾经的我也是那么的天真认为dispatch_get_main_queue就是在主线程里面执行什么什么的。其实不是这样的啊。
先介绍一下关于线程的概念。对于线程的概念我希望我们不要停留在线程上面。因为OC的大部分我们考虑线程的时候我们首先要考虑的是队列。
OC有三大队列第一个就是我们熟知的dispatch_get_main_queue,这个是主队列,是一个串行队列哦。
还有一个就是dispatch_get_global_queue这是一个全局的并行队列,默认后台执行的哦。这个队列还有两个参数一个是flags 我们一般都写0,这里就不做解释了,另外一个是identifier 这个就需要说一下了,这是一个标识,一个优先级的一个标识,他是一个宏,一个枚举值大概是这个样子的。
__QOS_ENUM(qos_class, unsigned int,
QOS_CLASS_USER_INTERACTIVE
__QOS_CLASS_AVAILABLE_STARTING(__MAC_10_10, __IPHONE_8_0) = 0x21,
QOS_CLASS_USER_INITIATED
__QOS_CLASS_AVAILABLE_STARTING(__MAC_10_10, __IPHONE_8_0) = 0x19,
QOS_CLASS_DEFAULT
__QOS_CLASS_AVAILABLE_STARTING(__MAC_10_10, __IPHONE_8_0) = 0x15,
QOS_CLASS_UTILITY
__QOS_CLASS_AVAILABLE_STARTING(__MAC_10_10, __IPHONE_8_0) = 0x11,
QOS_CLASS_BACKGROUND
__QOS_CLASS_AVAILABLE_STARTING(__MAC_10_10, __IPHONE_8_0) = 0x09,
QOS_CLASS_UNSPECIFIED
__QOS_CLASS_AVAILABLE_STARTING(__MAC_10_10, __IPHONE_8_0) = 0x00,
);
这几个值分别指定了不同的优先级,其中处理用户交互或处理用户触发的任务比那些后台任务具有更高的优先级
还有一个就是创建队列了dispatch_queue_create我们可以创建一个串行队列,也可以创建一个并行队列。
—————未完待续—————