我有工作线程任务,使用:
在主队列上发布结果// on worker queue
// (long-running task)
// publish results on main queue
dispatch_async(dispatch_get_main_queue(), ^(void) {
_finished = YES;
});
我如何坐在主队列(主CXTest线程)中并强制gcd处理队列中的当前任务,如:
// on main queue
while (!_finished) {
[NSThread sleepForTimeInterval:0.1];
// TODO : force main queue to perform current blocks
}
显而易见的解决方案是在工作线程中设置_finished,但由于某种原因我不能这样做(只能在主线程中触及UI控件)
答案 0 :(得分:0)
你可以像这样抽出你的跑步循环:
while (!_finished) {
[[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:1];
}
最终会耗尽主要队列,将_finished
设置为YES
。
但我建议您使用像XCAsyncTextCase这样的异步测试助手,同时expecta也有非常方便的异步助手。其他测试框架也可能有这样的扩展。