gpt4 book ai didi

ios - 我可以使用 addOperationWithBlock :? 取消添加到 NSOperationQueue 的 block 吗

转载 作者:可可西里 更新时间:2023-11-01 03:43:26 25 4
gpt4 key购买 nike

我读过很多文章都说“积木是 future !!!”。我想知道它是否与后台运行操作有关。

例如,我有一个表格 View ,其中包含来自网络的图像。现在我可以使用 +[NSOperationQueue addOperationWithBlock:] 获取它们。当单元格可见时,操作将发送到队列。但是一旦单元格滚出屏幕,有没有办法取消它?还是将其子类化为 NSOperation 的唯一方法?使用 block 非常简单,所以我只是在尝试解决 this example 之前问这个问题NSOperation 的子类...

最佳答案

问题似乎是您是否可以创建可取消的 NSBlockOperation。作为this answer建议,引用自 WWDC 2012 session #211, Building Concurrent User Interfaces ,你当然可以。

不过,这种方法存在局限性。值得注意的是,您必须将取消逻辑放在您的 block 中。如果您的 block 正在运行某个循环,它可以在其中重复检查 isCancelled 状态,则此方法可以正常工作。但是,如果您正处于某个网络请求的中间,这将很难在 NSBlockOperation 中执行。

使用其他答案(以及 WWDC 2012 视频)中概述的模式,您可以编写一个 NSBlockOperation,它采用基于 block 的 NSURLSession 和一个受折磨的组合如果操作被取消,轮询循环会取消 NSURLSessionTask,这会完成您想要的,但这是一个可怕的解决方案(效率低下,麻烦,使用 block 中的取消逻辑阻碍您的应用程序代码等)。

如果您想进行可取消的网络操作,NSOperation 子类将是一种更优雅的方式。第一次这样做时,它会显得很麻烦,但是一旦您熟悉了该模式,它就会成为第二天性并且实现起来很简单。你会发现自己一次又一次地回到这种模式。查看Defining a Custom Operation Object Concurrency Programming GuideOperation Queues 章节的部分,用于讨论如何进行可取消的并发操作,特别是关于“响应取消事件”的讨论。

作为最后的观察,您将此“使用 block ”和 NSOperation 子类描述为“非此即彼”命题。不过,您实际上经常将这两种技术结合起来,创建一个 NSOperation 子类,该子类采用 block 参数来指定下载完成后要执行的操作。将 AFNetworking 视为如何结合 block 和 NSOperation 子类的精彩示例。

关于ios - 我可以使用 addOperationWithBlock :? 取消添加到 NSOperationQueue 的 block 吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24087204/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com