usr/include/dispatch - object.h
1###
建议先阅读os/object.h头文件
在os/object.h中:
#ifndef OS_OBJECT_HAVE_OBJC_SUPPORT
#if defined(__OBJC__) && defined(__OBJC2__) && !defined(__OBJC_GC__) && ( \
__MAC_OS_X_VERSION_MIN_REQUIRED >= __MAC_10_8 || \
__IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_6_0)
#define OS_OBJECT_HAVE_OBJC_SUPPORT 1
#else
#define OS_OBJECT_HAVE_OBJC_SUPPORT 0
#endif
#endif
定义了宏OS_OBJECT_HAVE_OBJC_SUPPORT,如果1即ARC,所以dispatch_object_t可以自动retain和release实现内存管理,满足4点:
- _OBJC_
- _OBJC2_
- ! _OBJC_GC_
- __MAC_OS_X_VERSION_MIN_REQUIRED >= __MAC_10_8 || __IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_6_0
注释:objc-GC
名称 类别 描述
GCC SYS-DEVEL GNU编译器集
2##
#import <object.h>中,我们首先看到关于OS_OBJECT_USE_OBJC、__cplusplus和其他情况下(Plain C)的兼容适配的宏定义,dispatch_object_t是所有dispatch对象的抽象基类,它具体类型根据language-specific,例如上述三种情况。
#if OS_OBJECT_USE_OBJC
...
_dispatch_object_validate(dispatch_object_t object) {
void *isa = *(void* volatile*)(OS_OBJECT_BRIDGE void*)object;
(void)isa;
}
#elif defined(__cplusplus) && !defined(__DISPATCH_BUILDING_DISPATCH__)
...} *dispatch_object_t;
#else /* Plain C */
typedef union{
...
}dispatch_object_t
3.dispatch_block_t的block####
typedef void (^dispatch_block_t)(void);
4.dispatch_retain###
__OSX_AVAILABLE_STARTING(__MAC_10_6,__IPHONE_4_0)
DISPATCH_EXPORT DISPATCH_NONNULL_ALL DISPATCH_NOTHROW
void
dispatch_retain(dispatch_object_t object);
#if OS_OBJECT_USE_OBJC_RETAIN_RELEASE
#undef dispatch_retain
#define dispatch_retain(object) ({ dispatch_object_t _o = (object); \
_dispatch_object_validate(_o); (void)[_o retain]; })
#endif
5.dispatch_release###
__OSX_AVAILABLE_STARTING(__MAC_10_6,__IPHONE_4_0)
DISPATCH_EXPORT DISPATCH_NONNULL_ALL DISPATCH_NOTHROW
void
dispatch_release(dispatch_object_t object);
#if OS_OBJECT_USE_OBJC_RETAIN_RELEASE
#undef dispatch_release
#define dispatch_release(object) ({ dispatch_object_t _o = (object); \
_dispatch_object_validate(_o); [_o release]; })
#endif
6.dispatch_get_context 取得object上下文###
void *
dispatch_get_context(dispatch_object_t object);
7.dispatch_set_context 设置object上下文###
void
dispatch_set_context(dispatch_object_t object, void *context);
8.dispatch_set_finalizer_f 设置object的终止函数###
void
dispatch_set_finalizer_f(dispatch_object_t object,
dispatch_function_t finalizer);
9.dispatch_resume 恢复object在block的调用###
void
dispatch_resume(dispatch_object_t object);
10.dispatch_suspend 推迟object在block的调用###
void
dispatch_resume(dispatch_object_t object);
11.dispatch_wait 同步等待object对象操作###
long
dispatch_wait(void *object, dispatch_time_t timeout);
#if __has_extension(c_generic_selections)
#define dispatch_wait(object, timeout) \
_Generic((object), \
dispatch_block_t:dispatch_block_wait, \
dispatch_group_t:dispatch_group_wait, \
dispatch_semaphore_t:dispatch_semaphore_wait \
)((object),(timeout))
#endif
12..dispatch_notify###
在一个队列中当一个指定的object执行完之后就调度一个block通知回调。
void
dispatch_notify(void *object, dispatch_object_t queue,
dispatch_block_t notification_block);
#if __has_extension(c_generic_selections)
#define dispatch_notify(object, queue, notification_block) \
_Generic((object), \
dispatch_block_t:dispatch_block_notify, \
dispatch_group_t:dispatch_group_notify \
)((object),(queue), (notification_block))
#endif
13.dispatch_cancel###
void
dispatch_cancel(void *object);
#if __has_extension(c_generic_selections)
#define dispatch_cancel(object) \
_Generic((object), \
dispatch_block_t:dispatch_block_cancel, \
dispatch_source_t:dispatch_source_cancel \
)((object))
#endif
14.dispatch_testcancel####
long
dispatch_testcancel(void *object);
#if __has_extension(c_generic_selections)
#define dispatch_testcancel(object) \
_Generic((object), \
dispatch_block_t:dispatch_block_testcancel, \
dispatch_source_t:dispatch_source_testcancel \
)((object))
#endif
15.debug函数###
😄
总结###
dispatch_object_t作为dispatch系列的基类,定义了基类该有的API,很好很强大

浙公网安备 33010602011771号