【发布时间】:2015-12-04 09:10:36
【问题描述】:
最近我在使用 GCD 时遇到问题。下面是一些代码sn-p:
static dispatch_queue_t queue() {
static dispatch_queue_t sl_queue;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
sl_queue = dispatch_queue_create("com.somnus.xxx", NULL);
});
return sl_queue;
}
- (void)test
{
while (self.state != finished)
{
//wait for finish
}
dispatch_async(queue(), ^{
self.state = processing;
void (^onFinish)(void) = 0;
onFinish = ^(void){
self.state = finished;
};
[someObj doSomethingWithFinishBlock:onFinish];
});
}
我想确保每次 test() 方法将块添加到队列中时,状态都是完成的。也就是说,调用test时,检查状态,如果发现状态正在处理,等待状态变为finished,然后执行dispatch_async()。
我该如何实现这个,感谢您的帮助!
编辑:
doSomethingWithFinishBlock是一个异步函数,不知道onFinish Block什么时候入队
【问题讨论】:
-
doSomethingWithFinishBlock是异步函数吗? -
@Cy-4AH 是的,doSomethingWithFinishBlock 是一个异步函数
标签: ios objective-c objective-c-blocks