Objective-C: конвертировать executeSelector в Grand Central Dispatch

У меня есть некоторый код, который я получил из книги, которая использует executeSelectorOnMainThread. Я обнаружил, что в некоторых случаях приложение зависает и хочу изменить его на фоновый поток с помощью GCD:

Это мой код:

 [self performSelectorOnMainThread:@selector(fetchData:) withObject:data waitUntilDone:YES];

Следует ли изменить его на фон GCD так же просто, как

[self  dispatch_async(dispatch_get_global_queue(QOS_CLASS_USER_INITIATED, 0)) {
    (fetchData:) withObject:data
}];

Это в настоящее время выдает ожидаемую ошибку ']'

1 ответ

Решение

Не совсем. Это должно быть:

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
    [self fetchData:data];
});

Обратите внимание, что dispatch_async это вызов функции, а не вызов метода. Он принимает блок в качестве второго параметра. Код внутри блока - это место, где вы помещаете фактический код, который вы хотите вызвать, в фоновом режиме.

Другие вопросы по тегам