我想将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
});
}
如果有更多知识渊博的人可以参加以下活动,那就更好了
有问题吗?我可以看到整个过程在不久后就被杀死了。
我还能做些其他事情吗?我尝试从调用线程中调用完成处理程序,然后启动主线程。工作完成了,但是siri当然不会等待,而是立即打印用户响应,效果不是很好。