ios – 我可以使用addOperationWithBlock取消添加到NSOperationQueue的块吗?

ios – 我可以使用addOperationWithBlock取消添加到NSOperationQueue的块吗?,第1张

概述我读了很多文章说“块是未来!!!”.我想知道它是否与后台运行 *** 作有关. 例如,我有一个表视图,其中包含来自Web的图像.现在我可以使用[NSOperationQueue addOperationWithBlock:]来获取它们.当单元格变为可见时, *** 作将被发送到队列.但有一种方法可以在单元格从屏幕滚动后取消它吗?或者是NASSperation的子类化的唯一方法?使用块是如此简单,所以在我尝试解决t 我读了很多文章说“块是未来!!!”.我想知道它是否与后台运行 *** 作有关.

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

解决方法 问题似乎是您是否可以创建可取消的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的块吗?所遇到的程序开发问题。

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

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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存