【发布时间】:2013-07-29 09:17:59
【问题描述】:
我有以下(伪)代码:
- (void)testAbc
{
[someThing retrieve:@"foo" completion:^
{
NSArray* names = @[@"John", @"Mary", @"Peter", @"Madalena"];
for (NSString name in names)
{
[someObject lookupName:name completion:^(NSString* urlString)
{
// A. Something that takes a few seconds to complete.
}];
// B. Need to wait here until A is completed.
}
}];
// C. Need to wait here until all iterations above have finished.
STAssertTrue(...);
}
这段代码在主线程上运行,完成块A也在主线程上。
- 如何在 B 处等待 A 完成?
- 随后如何在 C 处等待外部完成块完成?
【问题讨论】:
-
// B.这里需要等到A完成应该在block的末尾
-
@AndreyChernukha 不,因为
someObject在其他线程上做事,并且只在主线程上调用完成块。 B 在块内时,所有循环迭代都将执行,而无需先等待前一个 A 完成。 -
那你就不需要块了
-
@AndreyChernukha 你是什么意思?如果您的意思是我不需要阻止 = 等待,那么不需要。在 A 的所有迭代完成之后,我需要在 C 处做点什么。
-
我的意思是:1)lookupName 2)A 3)B 所有随后都没有将 A 放入块中
标签: ios objective-c