Ios 使用块和GCD管理任务
我正在学习iOS,当涉及到GCD时,我会感到困惑。 让我们把它放一边,我正在写一个从互联网上获取数据的小程序。 这是我的视图控制器Ios 使用块和GCD管理任务,ios,objective-c-blocks,grand-central-dispatch,Ios,Objective C Blocks,Grand Central Dispatch,我正在学习iOS,当涉及到GCD时,我会感到困惑。 让我们把它放一边,我正在写一个从互联网上获取数据的小程序。 这是我的视图控制器 NSMutableArray dataArray = [NSMutableArray array]; [querysomethingwithblock:(^ { //do some stuff here [otherquerywithblock:( ^ { //do some stuff here // Here I got
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-performation:dataArray]
总是在我获取数据之前被解雇。我试着玩GCD,但没有运气
这是我到目前为止尝试过的一些模式
dispatch_async(queue, ^{
// Do query stuff here
dispatch_async(dispatch_get_mainqueue(), ^{
//perform action here
});
{;
或者使用dispatch\u group\u async
,dispatch\u group\u wait
,dispatch\u group\u notify
我现在唯一能处理的方法是使用dispatch\u after
,但关键是下载时间是可变的,在这里指定一个特定的时间不是一个好的做法
非常感谢您的建议。这里名为
Do query stuff的代码部分
我假设已经是异步的,那么为什么要将它放在调度队列中呢
相反,如果您设法执行同步查询,那么您的代码(第二个代码段)将起作用,因为只有在查询完成后才会执行对主队列的分派
如果您没有以同步方式执行查询的选项,那么您需要某种机制来注册一个块或回调,以便在下载完成时执行
归根结底,这完全取决于您的查询类型以及它为您提供了什么方法来注册下载完成时要执行的操作。从otherqueryblock中调用performAction!如果你需要在一个特定的线程上,那么使用GCD或NSObject-performSelector:onMainThread:…抱歉,伙计,我重新编辑了代码以便更好地理解,解释为什么我不能将`[self-performAction:dataArray]放入该块据我所知,查询块是异步的,你能给我更多关于实现回调或块来处理这个问题的细节吗,因为我对Objective-C非常陌生。我只是为了更好地理解而编辑了我的代码。我认为我无法获取同步查询,因为它是从Parse.com API获取的