Подтвердить что ты не робот

Перемещение функции в фоновый поток в объективе c

У меня есть функция, которая возвращает строку, которая занимает 15 секунд для вычисления на iPhone.

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

Я слышал, что GCD - это новая технология, которая хороша для этого, может ли кто-нибудь предоставить примерный код в отношении того, как это будет работать?

То есть для запуска общей функции в фоновом потоке и возврата результата в текстовое поле пользовательского интерфейса.

EDIT:

Спасибо Alladinian, это работает.

Однако, когда я использую GCD, моя функция занимает 1 секунду дольше, чтобы выполнить на симуляторе iphone (я бы предположил, что это будет около 5 секунд на iphone (плохо проверить это позже сегодня, чтобы быть уверенным))

Есть ли причина, почему это так? Возможно, фоновый поток медленнее или что-то еще?

4b9b3361

Ответ 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];