gpt4 book ai didi

ios - 在执行之前停止后台执行

转载 作者:行者123 更新时间:2023-11-29 04:45:53 24 4
gpt4 key购买 nike

我使用dispatch_async编写了后台处理逻辑,如下:

- (IBAction)textFieldChanged:(id)sender {
dispatch_async(kBgQueue, ^{
NSArray *tempArray = [myClass getSuggestionArray]; //getSuggestionArray returns an array of objects from a database
[self performSelectorOnMainThread:@selector(initSuggestionArray:) withObject:tempArray waitUntilDone:YES];
});
}

如您所见,每次用户编辑文本字段(只要用户键入字母)都会调用此方法。kBgQueue定义为:

#define kBgQueue dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)

我想要的是一些方法,一些逻辑,以便每当用户编辑字段时我都可以检查此 kBgQueue 中是否已经有一个排队任务,如果有,那么我想停止该排队作业的执行在开始下一个 block 之前。(想要删除前一个 block )我使用它是为了让应用程序的 UI 看起来不会像挂起一样,如果用户快速键入 3-4 个字符(因为结果来得太晚了)数据库)

最佳答案

您可以使用 NSOperationQueue 而不是 GCD 队列并添加如下操作:

[queue addOperationWithBlock:^{
NSArray *tempArray = [myClass getSuggestionArray];
dispatch_async(dispatch_get_main_queue(), ^{
[self initSuggestionArray:tempArray];
});
}];

然后您可以通过以下方式取消所有操作

[queue cancelAllOperations];

如果您需要更细粒度的控制,您可以子类化 NSOperation 并添加一些检查以查看操作是否已被取消。

关于ios - 在执行之前停止后台执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9645239/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com