我编写了一个遵循 Apple文档的简单测试用例,但我没有看到我期望的结果。
这是代码:
- (void)testExample2
{
NSLog(@"1");
dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"3");
dispatch_semaphore_signal(semaphore);
});
NSLog(@"2");
dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
NSLog(@"4");
dispatch_release(semaphore);
}
我希望阅读:1、2、3、4,但我的控制台只显示 1、3。
我已经能够DISPATCH_TIME_NOW
在while循环中与NSLoop hack一起使用来解决这个问题,但是上面的代码应该可以工作......对吗?
干杯...
更新
我刚刚意识到我应该使用单独的队列而不是dispatch_main_queue()