![]() |
![]()
| ![]() |
![]()
NAME
SYNOPSIS
void
void
void
void
void
void *
void
void
DESCRIPTIONDispatch objects share functions for coordinating memory management, suspension, cancellation and context pointers. MEMORY MANAGEMENTObjects returned by creation functions in the dispatch framework
may be uniformly retained and released with the functions
The dispatch framework does not guarantee that any given client has the last or only reference to a given object. Objects may be retained internally by the system. INTEGRATION WITH OBJECTIVE-CWhen building with an Objective-C or Objective-C++
compiler, dispatch objects are declared as Objective-C types. This results in
the following differences compared to building as plain C/C++:
Integration of dispatch objects with Objective-C requires
targeting Mac OS X 10.8 or later, and is disabled when
building for the legacy Objective-C runtime. It can also be disabled
manually by using compiler options to define the
Important: When building with a plain C/C++ compiler or when integration with Objective-C is disabled, dispatch objects are not automatically retained and released when captured by a block. Therefore, when a dispatch object is captured by a block that will be executed asynchronously, the object must be manually retained and released: dispatch_retain(object); dispatch_async(queue, ^{ do_something_with_object(object); dispatch_release(object); }); ACTIVATIONDispatch objects such as queues and sources may be created in an
inactive state. Objects in this state must be activated before any blocks
associated with them will be invoked. Calling
Changing attributes such as the target queue or a source handler is no longer permitted once the object has been activated (see dispatch_set_target_queue(3), dispatch_source_set_event_handler(3) ). SUSPENSIONThe invocation of blocks on dispatch queues or dispatch sources
may be suspended or resumed with the functions
The dispatch framework always checks the suspension status before executing a block, but such changes never affect a block during execution (non-preemptive). Therefore the suspension of an object is asynchronous, unless it is performed from the context of the target queue for the given object. The result of suspending or resuming an object that is not a dispatch queue or a dispatch source is undefined. Important: suspension
applies to all aspects of the dispatch object life cycle, including the
finalizer function and cancellation handler. Suspending an object causes it
to be retained and resuming an object causes it to be released. Therefore it
is important to balance calls to
CONTEXT POINTERSDispatch objects support supplemental context pointers. The value
of the context pointer may be retrieved and updated with
SEE ALSOdispatch(3), dispatch_async(3), dispatch_group_create(3), dispatch_queue_create(3), dispatch_semaphore_create(3), dispatch_set_target_queue(3), dispatch_source_cancel(3), dispatch_source_create(3)
|