GCD-3 Using Dispatch Groups

本文是本人自己辛苦翻译的,请转载的朋友注明,翻译于Z.MJun的 ,感谢!<翻译不容易啊>


完成翻译于2016年5月17日


Using Dispatch Groups使用调度组

在程序里,可以提交多个块到调度组中,并且可以跟踪他们知道完成。及时他们可能是在不同的队列里运行。当进度不可知并直到所有指定的任务都完成,这个方法是很有用的。


异步组 dispatch_group_async

  • 描述:提交一个Block到一个队列里和将Block和指定的调度组关联起来。
  • 方法:void dispatch_group_async( dispatch_group_t group, dispatch_queue_t queue, dispatch_block_t block)
  • 参数:
    • group 调度组关联着Block。这个组会被系统保留,直到Block执行完毕。这个参数也不能为NULL
    • queue 异步调用Block的队列,这个队列会被系统保留,直到Block执行完毕。这个参数不能为NULL。
    • block 这个Block是异步执行的,这个方法会执行Block_copyBlock_release
  • 提交一个Block到一个队列里和将Block和指定的调度组关联起来。调度组可用于等待所引用的Block对象的完成。

异步组 dispatch_group_async_f

  • 描述:提交系统默认方法到一个队列里和将默认方法和指定的调度组关联起来。
  • 方法:void dispatch_group_async_f( dispatch_group_t group, dispatch_queue_t queue, void *context, dispatch_function_t work)
  • 参数:
    • group 调度组关联着Block。这个组会被系统保留,直到Block执行完毕。这个参数也不能为NULL
    • queue 异步调用Block的队列,这个队列会被系统保留,直到Block执行完毕。这个参数不能为NULL。
    • context 提交给默认方法的参数。
    • work 目标函数调用的系统默认方法。context传入默认方法里。
  • 提交系统默认方法到一个队列里和将默认方法和指定的调度组关联起来。调度组可用于等待所引用系统默认方法的完成。

创建调度组 dispatch_group_create

  • 描述:创建一个新的可以关联Block的调度组。
  • 方法:dispatch_group_t dispatch_group_create( void)
  • 返回:一个新的组,如果创建失败返回NULL。
  • 这个方法创建一个新的可以关联Block的调度组。关联方法使用dispatch_group_async。这个调度组保护一个数据量的未完成的关联任务,但一个新的任务关联,数量量会增加。这个组决定任务什么时候完成任务。像使用这样的方法dispatch_group_notifydispatch_group_wait确定所有关联任务的组已经完成。到那个时候,你的应用可以使用一些合适的响应。
  • 当你的应用不需要使用调度组,需要调用dispatch_release这个方法来释放组和分配的内存。

执行组 dispatch_group_enter

  • 描述:明确的表明一个Block进入这个组。
  • 方法:void dispatch_group_enter( dispatch_group_t group)
  • 参数:
    • group 更新调度组。这个参数也不能为NULL
  • 在组中调用这个方法来递增当前未完成的任务计数。如果在这个组里明确的增加或移除任务,可以使用这个方法dispatch_group_leave让应用正确的管理任务计数。通过使用dispatch_group_async功能以外(by a means other than using the dispatch_group_async function)。调用这个方法,必须要调用dispatch_group_leave做释放。你可以同时在多个组里使用这个方法来关联Block。

结束组 dispatch_group_leave

  • 描述:明确的表明一个Block在这个组里被完成了。
  • 方法:void dispatch_group_leave( dispatch_group_t group)
  • 参数:
    • group 更新调度组。这个参数也不能为NULL
  • 在组中调用这个方法来减少当前未完成的任务计数。如果在这个组里明确的增加或移除任务,可以使用这个方法dispatch_group_enter让应用正确的管理任务计数。通过使用dispatch_group_async功能以外(by a means other than using the dispatch_group_async function)。调用这个方法前,必须要调用dispatch_group_enter做释放。只能调用一次,多次调用会导致负计数。

异步结束组通知 dispatch_group_notify

  • 描述:当组内的Block全部执行完毕,异步通知传入这个函数的block。
  • 方法:void dispatch_group_notify( dispatch_group_t group, dispatch_queue_t queue, dispatch_block_t block)
  • 参数:
    • group 观察这个调度组,这个组会被系统保留直到Block完成。这个参数也不能为NULL
    • queue 传入队列,队列会被系统保留直到Block完成。这个参数也不能为NULL
    • block 当组完成,提交block。这个方法会执行Block_copyBlock_release,这个参数也不能为NULL。
  • 当组内的Block全部执行完毕,异步通知传入这个函数的block。如果组是空的,没有Block关联到调度组上,这个Block会马上返回。
  • 当通知Block被提交,并组是空的。这个组可能被dispatch_release释放也或者被额外的Block对象重用。想要了解更多,看dispatch_group_async

异步结束组通知 dispatch_group_notify_f

  • 描述:当组内的Block全部执行完毕,异步通知传入默认系统函数。
  • 方法:void dispatch_group_notify_f( dispatch_group_t group, dispatch_queue_t queue, void *context, dispatch_function_t work)
  • 参数:
    • group 观察这个调度组,这个组会被系统保留直到Block完成。这个参数也不能为NULL
    • queue 传入队列,队列会被系统保留直到Block完成。这个参数也不能为NULL
    • context 默认系统函数的参数。
    • work 当组完成,目标队列会调用这个函数。
  • 当组内的Block全部执行完毕,异步通知传入默认系统函数。如果组是空的,没有Block关联到调度组上,这个函数会马上返回。
  • 当通知Block被提交,并组是空的。这个组可能被dispatch_release释放也或者被额外的Block对象重用。想要了解更多,看dispatch_group_async

同步结束组通知 dispatch_group_wait

  • 描述:同步的等待先前传入的Block对象完成。如果Block没有完成,但是超时就会返回。
  • 方法:long dispatch_group_wait( dispatch_group_t group, dispatch_time_t timeout)
  • 参数:
    • group 调度组。这个参数也不能为NULL。
    • timeout 如果超时(看dispatch_time)。DISPATCH_TIME_NOWDISPATCH_TIME_FOREVER这个常量。
  • 返回:返回0代表成功,在超时前,所有的Block关联的组完成。返回非0代表失败,或超时。
  • 同步的等待先前传入的Block对象完成。如果Block没有完成,但是超时就会返回。当超时发生,这个组会被恢复到原来的状态。
  • 当组是空的,这个函数会马上返回。
  • 成功返回后,并这个组是空的。这个组可以被dispatch_release释放或者被另外一个Block重用。了解更多查看dispatch_group_async

你可能感兴趣的:(GCD-3 Using Dispatch Groups)