Перемещение функции в фоновый поток в объективе c
У меня есть функция, которая возвращает строку, которая занимает 15 секунд для вычисления на iPhone.
Я хочу иметь возможность запускать функцию в фоновом потоке, чтобы основной поток можно было использовать для пользовательского интерфейса.
Я слышал, что GCD
- это новая технология, которая хороша для этого, может ли кто-нибудь предоставить примерный код в отношении того, как это будет работать?
То есть для запуска общей функции в фоновом потоке и возврата результата в текстовое поле пользовательского интерфейса.
EDIT:
Спасибо Alladinian, это работает.
Однако, когда я использую GCD, моя функция занимает 1 секунду дольше, чтобы выполнить на симуляторе iphone (я бы предположил, что это будет около 5 секунд на iphone (плохо проверить это позже сегодня, чтобы быть уверенным))
Есть ли причина, почему это так? Возможно, фоновый поток медленнее или что-то еще?
Ответы
Ответ 1
Хорошо, что довольно легко с GCD. Типичный рабочий процесс будет примерно таким:
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0ul);
dispatch_async(queue, ^{
// Perform async operation
// Call your method/function here
// Example:
// NSString *result = [anObject calculateSomething];
dispatch_sync(dispatch_get_main_queue(), ^{
// Update UI
// Example:
// self.myLabel.text = result;
});
});
Подробнее о GCD вы можете посмотреть в документации Apple здесь
Ответ 2
Также, чтобы добавить, иногда вам не нужно использовать GCD, этот очень прост в использовании:
[self performSelectorInBackground:@selector(someMethod:) withObject:nil];