1

我编写了一个遵循 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()

4

1 回答 1

0

最终在我的tearDown.

while (dispatch_semaphore_wait(semaphore, DISPATCH_TIME_NOW)) {
    NSLog(@"...Tearing Down Tests..");
    [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode
                             beforeDate:[NSDate dateWithTimeIntervalSinceNow:10]];
}
dispatch_release(semaphore);  

并将信号量创建推入setUp.

于 2012-09-05T20:09:48.203 回答