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