Siri Intenthandler不会在主线程上解除分配

时间:2019-01-24 14:26:55

标签: ios objective-c multithreading siri

我想将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   
    });
}

如果有更多知识渊博的人可以参加以下活动,那就更好了

  1. 有问题吗?我可以看到整个过程在不久后就被杀死了。

  2. 我还能做些其他事情吗?我尝试从调用线程中调用完成处理程序,然后启动主线程。工作完成了,但是siri当然不会等待,而是立即打印用户响应,效果不是很好。

0 个答案:

没有答案