我有一个场景,我必须遍历一个帐号列表,去获取这些账户的详细信息,然后将聚合信息传递给 completionBlock。为了促进这一点,我正在使用 dispatch_group_* 方法。不幸的是,即使我已明确调用,在组完成之前仍会调用完成块
dispatch_group_wait(_imfDispatchGroup, DISPATCH_TIME_FOREVER);
控制台日志示例(原始):
2012-10-28 13:58:46.722 ThreadingHell[81909:303] 在 loginResponse 中
2012-10-28 13:58:46.724 ThreadingHell[81909:303] 在 obj 的帐户循环内:account1
2012-10-28 13:58:46.724 ThreadingHell[81909:303] 在 obj 的帐户循环内:account2
2012-10-28 13:58:46.724 ThreadingHell[81909:1b03] 内部细节:L0i6kRVzGG 细节
2012-10-28 13:58:46.724 ThreadingHell[81909:1a03] 内部细节:SE0QjhO8Hh 细节
2012-10-28 13:58:46.724 ThreadingHell[81909:303] 在 obj 的帐户循环内:account3
2012-10-28 13:58:46.725 ThreadingHell[81909:1a03] 内部完成 __66-[ModelManager getAccountDetailsForAccountNumber:completionBlock:]_block_invoke_015
2012-10-28 13:58:46.725 ThreadingHell[81909:1803] 内部细节:9SsGYOX3u5 细节
2012-10-28 13:58:46.725 ThreadingHell[81909:1a03] 账户详情
2012-10-28 13:58:46.725 ThreadingHell[81909:303] 在 obj 的帐户循环内:account4
2012-10-28 13:58:46.725 ThreadingHell[81909:1b03] 内部完成 __66-[ModelManager getAccountDetailsForAccountNumber:completionBlock:]_block_invoke_015
2012-10-28 13:58:46.726 ThreadingHell[81909:1803] 内部完成 __66-[ModelManager getAccountDetailsForAccountNumber:completionBlock:]_block_invoke_015
2012-10-28 13:58:46.726 ThreadingHell[81909:303] 在 obj 的帐户循环内:acount5
2012-10-28 13:58:46.726 ThreadingHell[81909:1a03] 成功帐户循环
2012-10-28 13:58:46.726 ThreadingHell[81909:1b03] 详细信息已找到帐户
2012-10-28 13:58:46.726 ThreadingHell[81909:2303] 内部细节:wSXis5bIVs 细节
2012-10-28 13:58:46.728 ThreadingHell[81909:1803] 账户详情
2012-10-28 13:58:46.728 ThreadingHell[81909:2403] 内部细节:SrIfbzBLr7 细节
2012-10-28 13:58:46.728 ThreadingHell[81909:1a03] accountDetails 的当前实例:(“L0i6kRVzGG 详细信息”)
2012-10-28 13:58:46.728 ThreadingHell[81909:1803] 成功帐户循环
2012-10-28 13:58:46.728 ThreadingHell[81909:1b03] 成功帐户循环
2012-10-28 13:58:46.729 ThreadingHell[81909:2403] 内部完成 __66-[ModelManager getAccountDetailsForAccountNumber:completionBlock:]_block_invoke_015
2012-10-28 13:58:46.729 线程地狱[81909:303] !!!!!!!!!!!! 即将调用完成块。这应该是最后
2012-10-28 13:58:46.729 ThreadingHell[81909:2303] 内部完成 __66-[ModelManager getAccountDetailsForAccountNumber:completionBlock:]_block_invoke_015
2012-10-28 13:58:46.730 ThreadingHell[81909:1803] accountDetails 的当前实例:(“L0i6kRVzGG 详细信息”,“9SsGYOX3u5 详细信息”)
2012-10-28 13:58:46.730 ThreadingHell[81909:1b03] accountDetails 的当前实例:(“L0i6kRVzGG 详细信息”、“9SsGYOX3u5 详细信息”、“SE0QjhO8Hh 详细信息”)
2012-10-28 13:58:46.731 ThreadingHell[81909:2403] 账户详情
2012-10-28 13:58:46.731 ThreadingHell[81909:2303] 账户详情
2012-10-28 13:58:46.732 ThreadingHell[81909:2403] 成功帐户循环
2012-10-28 13:58:46.731 ThreadingHell [81909:303] obj: { }
2012-10-28 13:58:46.732 ThreadingHell[81909:2303] 成功帐户循环
2012-10-28 13:58:46.732 ThreadingHell [81909:303] 错误:(空)
2012-10-28 13:58:46.732 ThreadingHell[81909:2403] accountDetails 的当前实例:(“L0i6kRVzGG 详细信息”、“9SsGYOX3u5 详细信息”、“SE0QjhO8Hh 详细信息”、“wSXis5bIVs 详细信息”)
// 来自最新提交的更新日志 [https://github.com/kwylez/ThreadingHell/tree/80cc29fab142b4dc1f386df747c5142b28e2dd84]
1b03] accountDetails的当前实例:(“CP3ioYdvXp详细信息”,“6k635XoJOV详细信息”,“2TjGF1fdaZ详细信息”,“0YiuX9gHsu详细信息”,“9RcyOfjRa5详细信息”)2012-10-28 16:32:39.008 ThreadingHell[83171:303]! !!!!!!!!!即将调用完成块。这应该是最后 2012-10-28 16:32:39.009 ThreadingHell[83171:303] obj: { } 2012-10-28 16:32:39.009 ThreadingHell[83171:303] 错误:(空)
我错过了什么“操作顺序”?
这是 github 上示例项目的链接(代码太多,无法放在这里):