Я написал логику фоновой обработки с использованием 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 или нет, и если это так,затем я хочу остановить выполнение этого задания в очереди перед началом следующего блока. (хочу удалить предыдущий) Я использую это, чтобы пользовательский интерфейс приложения не выглядел так, как будто он завис, если пользователь вводит 3-4символы быстро (потому что результат приходит слишком поздно из моей базы данных)