Я хочу использовать CLLocationManager с обратными вызовами в моем намерении Siri. Чтобы получить обратные вызовы, я должен создать его в главном потоке (в противном случае я получаю предупреждение о том, что «сам поток должен иметь активный цикл выполнения»
Итак, я делаю это в главном потоке, и все работает нормально, если задание выполнено и пользователю отображается представление ответа.
Однако я заметил, что мой класс Intenthandling не освобождается после того, как я вызываю обработчик завершения. Не имеет значения, если я только вызову завершение сразу, метод dealloc не вызывается.
Я подозреваю, что это потому, что я вызываю обработчик завершения из основного потока?
Раздетый метод:
- (void)handleCheckout:(nonnull CheckoutIntent *)intent completion:(nonnull void (^)(CheckoutIntentResponse * _Nonnull))completion {
dispatch_async(dispatch_get_main_queue(), ^{
CheckoutIntentResponse *ir = [[CheckoutIntentResponse alloc] initWithCode:CheckoutIntentResponseCodeSuccess userActivity:nil];
completion(ir); //object won't be deallocated
});
}
Если бы было замечательно, если бы кто-то более знающий мог рассказать о:
это проблема? Я вижу, что через некоторое время весь процесс завершается.
Есть ли что-то еще, что я могу сделать? Я попытался вызвать обработчик завершения из вызывающего потока, а затем запустить основной поток. Работа выполнена, но тогда Сири, конечно, не будет ждать, но сразу напечатает ответ пользователя, что не очень хорошо работает.