【发布时间】:2013-09-19 15:51:31
【问题描述】:
我正在学习 iOS,当谈到 GCD 时,我感到很困惑。 让我们把它排除在外,我正在编写一个从互联网获取数据的小程序。 这是我的视图控制器
NSMutableArray dataArray = [NSMutableArray array];
[querysomethingwithblock:(^ {
//do some stuff here
[otherquerywithblock:( ^ {
//do some stuff here
// Here I got the data from internet
// Do loop action
[dataArray addObject:data];
})];
})];
// here I want to perform some actions only after get data from internet
[self performAction:dataArray];
我怎样才能达到这个目的。实际上,[self performAction:dataArray] 总是在我得到数据之前被解雇。我尝试过使用 GCD,但没有成功。
这是我目前尝试过的一些模式
dispatch_async(queue, ^{
// Do query stuff here
dispatch_async(dispatch_get_mainqueue(), ^{
//perform action here
});
{;
或使用dispatch_group_async、dispatch_group_wait、dispatch_group_notify
我现在唯一可以处理的方法是使用dispatch_after,但关键是下载时间是可变的,这里有一个特定的时间不是一个好习惯
非常感谢您的建议。
【问题讨论】:
-
从 otherqueryblock 中调用 performAction !如果您需要在特定线程上,则使用 GCD 或 NSObject -performSelector:onMainThread: ... 中的嵌入方法
-
对不起伙计,我重新编辑代码以便更好地理解,解释为什么我不能把 `[self performAction:dataArray] 放到那个块中
标签: ios objective-c-blocks grand-central-dispatch