GCDObjC 是 Grand Central Dispatch 最常用特性的 Objective-C 封装。它有四个主要目标
Swift 版本在 GCDSwift。
GCDObjC 需要 ARC 和 iOS 6.0。 (在 6.0 之前,dispatch 对象不被视为 Objective-C 对象,因此需要进行手动内存管理。)
需要导入的仅有 GCDObjC.h 头文件。
关于用法示例,请参阅 GCDObjCTests.m。
通过 CocoaPods 安装
pod "GCDObjC"
队列在 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 类中实现。
- (instancetype)init;
- (instancetype)initWithValue:(long)value;
- (BOOL)signal;
- (void)wait;
- (BOOL)wait:(double)seconds;
组在 GCDGroup 类中实现。
- (instancetype)init;
- (void)enter;
- (void)leave;
- (void)wait;
- (BOOL)wait:(double)seconds;
提供了两个宏来封装 dispatch_once() 调用。
for (int i = 0; i < 10; ++i) {
GCDExecOnce(^{ NSLog(@"This will only be logged once."); });
}
+ (instancetype)sharedInstance {
GCDSharedInstance(^{ return [self new]; });
}
提供给 GCDSharedInstance() 的块必须返回所需类的实例。