我对 iOS 和 Objective-C 比较陌生。
我正在开发一个项目,旨在使复杂(或“复合”)操作的组合尽可能简单:https ://github.com/stanislaw/SACompositeOperations
我在那里有四种操作:两种单一操作(同步和异步)和两种复杂操作(级联和“事务”)。单个操作被用作复杂操作的“原子”,所以我想让它们尽可能好,以符合 Objective-C 的最佳实践。
我感兴趣的是:我应该为这些单一操作选择什么代码?
通过调用两个单一操作中的第一个“同步”,我的意思是:运行可能与完成处理程序异步的东西并锁定流程等待它完成。“异步”意味着真正的异步操作 - 只需以异步方式运行操作块。
这是我目前使用的单一操作代码:
同步操作
- (void)run:(syncOperationBlock)block {
self.semaphore = dispatch_semaphore_create(0);
block(self);
while (dispatch_semaphore_wait(self.semaphore, DISPATCH_TIME_NOW))
[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode
beforeDate:[NSDate dateWithTimeIntervalSinceNow:10]];
}
- (void)finish {
dispatch_semaphore_signal(self.semaphore);
}
@end
异步操作
- (void)run:(asyncOperationBlock)block {
dispatch_queue_t queue = dispatch_queue_create("async_operation.queue", 0);
dispatch_async(queue, ^{
block(self);
});
}
如果有人可以为这些单一的同步和异步操作建议任何解决方案,我将不胜感激:更通用,更常见,对于我描述的情况更好
很快:对于异步操作,强制同步操作的最佳代码是什么?
谢谢。