GCDObjC 0.3.0

GCDObjC 0.3.0

测试已测试
语言语言 Obj-CObjective C
许可证 MIT
发布最后发布2016年6月

Mark Smith维护。



GCDObjC 0.3.0

  • Mark Smith

GCDObjC 是 Grand Central Dispatch 最常用特性的 Objective-C 封装。它有四个主要目标

  • 将扁平的 C API 组织成合适的类。
  • 使用表示意图的名称来区分同步和异步函数。
  • 使用更方便的参数,如时间间隔。
  • 添加便利方法。

Swift 版本在 GCDSwift

使用方法

GCDObjC 需要 ARC 和 iOS 6.0。 (在 6.0 之前,dispatch 对象不被视为 Objective-C 对象,因此需要进行手动内存管理。)

需要导入的仅有 GCDObjC.h 头文件。

关于用法示例,请参阅 GCDObjCTests.m

通过 CocoaPods 安装

pod "GCDObjC"

GCDQueue

队列在 GCDQueue 类中实现。

  • 全局队列的便利访问器
+ (GCDQueue *)mainQueue;
+ (GCDQueue *)globalQueue;
+ (GCDQueue *)highPriorityGlobalQueue;
+ (GCDQueue *)lowPriorityGlobalQueue;
+ (GCDQueue *)backgroundPriorityGlobalQueue;
  • 测试当前执行上下文
+ (BOOL)isMainQueue;
  • 创建串行和并发队列
- (instancetype)initSerial;
- (instancetype)initConcurrent;
  • 异步执行队列中的块
- (void)queueBlock:(dispatch_block_t)block;
- (void)queueBlock:(dispatch_block_t)block afterDelay:(double)seconds;
- (void)queueBlock:(dispatch_block_t)block inGroup:(GCDGroup *)group;
  • 同步执行队列中的块
- (void)queueAndAwaitBlock:(dispatch_block_t)block;
- (void)queueAndAwaitBlock:(void (^)(size_t))block iterationCount:(size_t)count;
  • 同步或异步执行的队列屏障块
- (void)queueBarrierBlock:(dispatch_block_t)block;
- (void)queueAndAwaitBarrierBlock:(dispatch_block_t)block;
  • 在组上排队通知块
- (void)queueNotifyBlock:(dispatch_block_t)block inGroup:(GCDGroup *)group;
  • 挂起和恢复队列
- (void)suspend;
- (void)resume;
  • 使用键与上下文数据关联
- (void *)contextForKey:(const void *)key;
- (void)setContext:(void *)context forKey:(const void *)key;

GCDSemaphore

信号量在 GCDSemaphore 类中实现。

  • 创建信号量
- (instancetype)init;
- (instancetype)initWithValue:(long)value;
  • 在信号量上发出信号和等待
- (BOOL)signal;
- (void)wait;
- (BOOL)wait:(double)seconds;

GCDGroup

组在 GCDGroup 类中实现。

  • 创建组
- (instancetype)init;
  • 进入和离开组
- (void)enter;
- (void)leave;
  • 等待组完成
- (void)wait;
- (BOOL)wait:(double)seconds;

提供了两个宏来封装 dispatch_once() 调用。

  • 执行块一次:GCDExecOnce(block)
for (int i = 0; i < 10; ++i) {
    GCDExecOnce(^{ NSLog(@"This will only be logged once."); });
}
  • 创建类的单例:GCDSharedInstance(block)
+ (instancetype)sharedInstance {
  GCDSharedInstance(^{ return [self new]; });
}

提供给 GCDSharedInstance() 的块必须返回所需类的实例。