HTML5   发布时间:2022-04-27  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了ios – 我可以使用addOperationWithBlock取消添加到NSOperationQueue的块吗?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我读了很多文章说“块是未来!!!”.我想知道它是否与后台运行操作有关.

例如,我有一个表视图,其中包含来自Web的图像.现在我可以使用[NSOperationQueue addoperationWithBlock:]来获取它们.当单元格变为可见时,操作将被发送到队列.但有一方法可以在单元格从屏幕滚动后取消它吗?或者是NASSperation的子类化的唯一方法?使用块是如此简单,所以在我尝试解决this example的NSOperation子类之前,我只是问这个问题…

解决方法@H_301_6@
问题似乎是您是否可以创建可取消的NSBlockOperation.正如 this answer所说,从 WWDC 2012 session #211,Building Concurrent User Interfaces引用,你当然可以.

但是,这种方法包含限制.值得注意的是,您必须将取消逻辑放在块中.如果您的块正在运行某个循环,它可以重复检查isCancelled状态,这可以正常工作.但是,如果您正处于某个网络请求的中间,那么在NSBlockOperation中执行这将很难.

使用其他答案(以及WWDC 2012视频)中概述的模式,您可以编写一个NSBlockOperation,它使用基于块的NSURLSession和轮询循环的折叠组合,如果操作被取消,则取消NSURLSessionTask,从而实现您的意图,但这是一个可怕的解决方案(低效,繁琐,使用块中的取消逻辑来阻碍您的应用程序代码等).

如果您想进行可取消的网络操作,那么NSOperation子类将是一种更加优雅的方式.第一次这样做,它看起来很麻烦,但是一旦你熟悉了这个模式,它就变成了第二个本质而且很容易实现.你会发现自己一次又一次地回到这种模式.有关进行可取消的并发操作的讨论,请参阅“并发编程指南”的“操作队列”一章的Defining a Custom Operation Object部分,特别是关于“响应取消事件”的讨论.

作为最后的观察,您将此“使用块”和NSOperation-子类描述为“任一/或”命题.但是,实际上,您实际上要将这两种技术结合起来,创建一个NSOperation子类,该子类使用块参数来指定下载完成后要执行的操作.请参阅AFNetworking,作为如何结合块和NSOperation子类的一个很好的例子.

大佬总结

以上是大佬教程为你收集整理的ios – 我可以使用addOperationWithBlock取消添加到NSOperationQueue的块吗?全部内容,希望文章能够帮你解决ios – 我可以使用addOperationWithBlock取消添加到NSOperationQueue的块吗?所遇到的程序开发问题。

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

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。