gpt4 book ai didi

objective-c - 主队列上的 dispatch_sync 在单元测试中挂起

转载 作者:IT老高 更新时间:2023-10-28 11:43:24 27 4
gpt4 key购买 nike

我在使用内置 Xcode 单元测试框架 SenTestingKit 对一些大型中央调度代码进行单元测试时遇到了一些麻烦。我设法解决了我的问题。我有一个构建 block 并尝试在主线程上执行它的单元测试。但是,该 block 从未真正执行过,因此测试挂起,因为它是同步调度。

- (void)testSample {

dispatch_sync(dispatch_get_main_queue(), ^(void) {
NSLog(@"on main thread!");
});

STFail(@"FAIL!");
}

导致这个挂起的测试环境是什么?

最佳答案

dispatch_sync 在给定队列上运行一个 block 并等待它完成。在这种情况下,队列是主调度队列。主队列以 FIFO(先进先出)的顺序在主线程上运行其所有操作。这意味着每当您调用 dispatch_sync 时,您的新 block 将被放在行尾,并且在队列中的其他所有内容完成之前不会运行。

这里的问题是,您刚刚入队的 block 位于等待在主线程上运行的行的 end — 而 testSample 方法 当前在主线程上运行。在当前方法(本身)完成使用主线程之前,队列末尾的 block 无法访问主线程。但是 dispatch_sync 表示提交一个 block 对象以在调度队列上执行并等待该 block 完成。

关于objective-c - 主队列上的 dispatch_sync 在单元测试中挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7816159/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com