在iOS中的dispatch_async队列中的objective-c – kill项目

在iOS中的dispatch_async队列中的objective-c – kill项目,第1张

概述我在后台运行一堆项目,使用dispatch_async,有时我想杀死我在队列中的东西 – 这是可能的吗?例如,该代码在视图上运行,然后用户返回屏幕.所有这些被触发的动作都保持运行,无论后退导航.理想情况下,我想杀死这些项目: dispatch_async(dispatch_get_global_queue(2, 0), ^{ for (int i=0; i<[self.manufa 我在后台运行一堆项目,使用dispatch_async,有时我想杀死我在队列中的东西 – 这是可能的吗?例如,该代码在视图上运行,然后用户返回屏幕.所有这些被触发的动作都保持运行,无论后退导航.理想情况下,我想杀死这些项目:
dispatch_async(dispatch_get_global_queue(2,0),^{        for (int i=0; i<[self.manufacturers count]; i++) {            Nsstring *manufacturerID = [[[self.manufacturers objectAtIndex:i] ManufacturerID] stringValue];            [self doSync:manufacturerID withIndex:i setTimer:YES];        }    });

如果我创建一个队列并将其命名,然后在视图的dealloc上释放它,它们仍然继续运行.

解决方法 调度队列中没有明确规定终止.为了做到这一点,测试一个转义位置来确定终止是有点常见的.基本上,它将是一个信号量.

NSOperationQueue(更高层次的抽象,但仍使用GCD构建)确实支持取消 *** 作.所以,例如,您可以创建一系列NSOperations,并将它们添加到NSOperationQueue,然后在不需要完成时将消息-cancelAllOperations发送到队列.

您选择的很多架构将取决于它们中有多少是运行的,以及它们是否具有不同的触发器.在这些实现中,NSOperation可能是“最干净”的解决方案,因为您有一个任意队列,您可以观察完成 *** 作,还可以取消未完成的 *** 作.进一步降低黑客的规模将是一个不稳定的位置,每个这些块在紧密循环内观察,以确定是否过早完成.然而,进一步下降将是同一基本功能的全局变量.

最后,甚至NSOperation的实现都要进行一个测试,以便在一致的位置退出(因为只是杀死一个线程可能导致正在 *** 作的数据或分配/再培训中的数据不一致).

总结

以上是内存溢出为你收集整理的在iOS中的dispatch_async队列中的objective-c – kill项目全部内容,希望文章能够帮你解决在iOS中的dispatch_async队列中的objective-c – kill项目所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1097490.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-28
下一篇 2022-05-28

发表评论

登录后才能评论

评论列表(0条)

保存