Ios 目标C:等待方法中的最后一次调用
我有一个被多次调用的方法。但我只需要在最后一个方法调用中执行操作。我尝试了dispatch_async,但没有成功,因为仍在排队等待调用:Ios 目标C:等待方法中的最后一次调用,ios,objective-c,grand-central-dispatch,Ios,Objective C,Grand Central Dispatch,我有一个被多次调用的方法。但我只需要在最后一个方法调用中执行操作。我尝试了dispatch_async,但没有成功,因为仍在排队等待调用: -(void)doingSomething:(NSString*)someValue { dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ [NSThread sleepForTimeInterval:1.0f];
-(void)doingSomething:(NSString*)someValue
{
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
[NSThread sleepForTimeInterval:1.0f];
dispatch_async(dispatch_get_main_queue(), ^{
// do something with the last call
});
});
}
你们中有人知道如何排队,只使用最后一个电话吗
非常感谢您的帮助我的建议是使用
调度组
。在调用dispatch\u async
之前,先调用dispatch\u group\u enter
,然后调用dispatch\u group\u leave
和dispatch\u async
执行的块的末尾。然后,在将所有块排队后,使用dispatch\u group\u notify
计划完成块,它将在所有其他dispatch\u async
块完成后运行
dispatch_group_t group = dispatch_group_create();
for (...) {
dispatch_group_enter(group);
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
...
dispatch_group_leave(group);
});
}
dispatch_group_notify(group, dispatch_get_main_queue(), ^{
// This gets called when all the other blocks have finished
});
或者,您可以使用NSOperationQueue
而不是libdispatch,并执行一个完成操作,将所有其他操作作为依赖项列出。不过,这样做的缺点是不会在主队列上执行完成操作
NSOperation *completionOperation = [NSBlockOperation blockOperationWithBlock:^{
// This gets called when all the other operations have finished
}];
for (...) {
NSOperation *operation = [NSBlockOperation blockOperationWithBlock:^{
...
}];
[completionOperation addDependency:operation];
[operationQueue addOperation:operation];
}
[operationQueue addOperation:completionOperation];
你想等最后一个做某事的电话还是什么意思。恐怕我一点也不明白NSOperationQueue它将如何只使用最后一次对该方法的调用?我添加了一个基于
NSOperationQueue
的示例作为编辑。从您的两个示例中。将执行对该方法的所有调用。查看您的示例实现,最后一个调用是如何执行的?将您只希望执行一次的部分放入调度队列\u notify
块(对于第一个示例)或完成操作
(对于第二个示例)。你放在那里的代码将只执行一次,在所有其他事情都完成之后。你这样做的目的是什么?