GCD运行dispatch_block,并取消(dispatch_block_flags_t flags)

    dispatch_block_t block = dispatch_block_create(DISPATCH_BLOCK_BARRIER, ^{
        NSLog(@"do something");
    });
    dispatch_async(_queue,block);
    dispatch_block_cancel(block);
DISPATCH_ENUM(dispatch_block_flags, unsigned long,
    DISPATCH_BLOCK_BARRIER
            DISPATCH_ENUM_API_AVAILABLE(macos(10.10), ios(8.0)) = 0x1,
    DISPATCH_BLOCK_DETACHED
            DISPATCH_ENUM_API_AVAILABLE(macos(10.10), ios(8.0)) = 0x2,
    DISPATCH_BLOCK_ASSIGN_CURRENT
            DISPATCH_ENUM_API_AVAILABLE(macos(10.10), ios(8.0)) = 0x4,
    DISPATCH_BLOCK_NO_QOS_CLASS
            DISPATCH_ENUM_API_AVAILABLE(macos(10.10), ios(8.0)) = 0x8,
    DISPATCH_BLOCK_INHERIT_QOS_CLASS
            DISPATCH_ENUM_API_AVAILABLE(macos(10.10), ios(8.0)) = 0x10,
    DISPATCH_BLOCK_ENFORCE_QOS_CLASS
            DISPATCH_ENUM_API_AVAILABLE(macos(10.10), ios(8.0)) = 0x20,
);

@typedef dispatch_block_flags_t
传递给dispatch_block_createfunctions的标志。
*
@const DISPATCH_BLOCK_BARRIER
指示调度块对象在提交给DISPATCH_QUEUE_CONCURRENT队列时应该充当阻挡块的标志。有关详细信息,请参阅dispatch_barrier_async()。当调度块对象直接调用时,此标志无效。
*
@const DISPATCH_BLOCK_DETACHED
指示调度块对象应当与当前执行上下文属性(如QOS类,os_activity_t和当前IPC请求属性(如果有))脱离关联的标志。如果直接调用,块对象将在调用线程的持续时间内(在应用分配给块对象的属性之前,如果有的话)从调用线程中移除这些属性。如果提交给队列,将使用队列的属性(或专门分配给块对象的任何属性)执行块对象。
*
@const DISPATCH_BLOCK_ASSIGN_CURRENT
标志表示应为分派块对象分配当前创建块对象时的当前执行上下文属性。这适用于QOS类,os_activity_t和当前IPC请求属性(如果有)等属性。如果直接调用,块对象将在块体的持续时间内将这些属性应用于调用线程。如果将块对象提交给队列,则此标志将替换将提交的块实例与提交时当前的执行上下文属性关联的默认行为。如果使用DISPATCH_BLOCK_NO_QOS_CLASS或dispatch_block_create_with_qos_class()分配了特定的QOS类,那么QOS类将优先于此标志指示的QOS类分配。
*
@const DISPATCH_BLOCK_NO_QOS_CLASS
指示调度块对象不应被分配QOS类的标志。如果直接调用,块对象将与调用线程的QOS类一起执行。如果将块对象提交给队列,则会取代将提交的块实例与提交时的当前QOS类关联的默认行为。如果使用dispatch_block_create_with_qos_class()分配了特定的QOS类,则忽略此标志。
*
@const DISPATCH_BLOCK_INHERIT_QOS_CLASS
指示提交给队列的调度块对象的执行的标志应该优选分配给该块的QOS类(与提交时的块相关的)的QOS类。只有当有问题的队列没有分配的QOS类时,后者才会被使用,只要这样做不会导致QOS类低于从队列的目标队列继承的QOS类。当调度块对象被提交给队列进行异步执行时,这个标志是默认的,当调度块对象被直接调用时,这个标志是没有效果的。如果DISPATCH_BLOCK_ENFORCE_QOS_CLASS也被传递,它将被忽略。
*
@const DISPATCH_BLOCK_ENFORCE_QOS_CLASS
指示提交给队列的调度块对象的执行的标志应当优先于分配给该队列的QOS类(与提交时与该块相关联的对应的QOS类),只要这样做将会不会导致较低的QOS级别。将调度块对象提交到同步执行队列或直接调用调度块对象时,此标志是缺省值。

你可能感兴趣的:(iOS开发,GCD)