【问题标题】:Advanced NSOperation - Add dependency at runtime高级 NSOperation - 在运行时添加依赖项
【发布时间】:2015-10-13 10:44:58
【问题描述】:

有没有办法在运行时创建 NSoperation 并将其作为依赖项添加到正在进行且已处于执行状态的操作中?

如果没有,还有其他替代方法可以实现吗?

例如(我需要这个的用例):

根据服务器的响应,我想发起一个新的NSOperation,而网络服务本身是由连接操作驱动的(这已经在进行中)。

现在我希望连接操作仅在此响应驱动 NSOperation 完成后完成。

参考我获取代码的地方:

https://developer.apple.com/sample-code/wwdc/2015/

示例代码:高级 NSOperations

注意:

  1. 一个选项是,我总是可以将此 NSOperation 添加为依赖项,如果响应中不存在该响应,则调用完成。但是,我的观点是,如果我没有得到响应,我根本不想调用该操作。

  2. 另一种选择是让此 Connection 操作等到该操作完成,然后调用此响应的 finish() 驱动 NSOperation(这是实现解决方案的间接方式)。

  3. 我试图在运行时执行它的原因是我希望包含 NSOperation 的模块可以从我的项目中插入。每当我不想要该模块时..我将删除文件并且它不应该影响系统。

只是想知道是否有人遇到过同样的情况。

【问题讨论】:

  • 你可以创建一个 NSBlockOperation 基本上是一个包裹在一个 NSOperation 上的块,还有 NSInvocationOperation。当然,它们确实支持依赖项。

标签: ios swift dependencies nsoperation


【解决方案1】:

您不能将依赖项附加到正在运行的 NSOperations,即使可以,它也不会做太多事情。依赖项阻止它们的 NSOperation 启动,直到它们全部完成,在操作已经开始之后,它们就没有意义了。

很抱歉,我不明白您的用例。你能澄清一下你的“连接操作”是什么吗?另外,当附加一个新的依赖项时,你期望会发生什么?它应该停止运行吗?

【讨论】:

  • 它不应该停止运行。它应该等到,基于 Web 服务响应创建的下一个操作完成。正如它所说的连接操作是用于连接到 Web 服务的操作(理想情况下是一个 url 连接,然后是依赖于网络操作的解析)。我知道如果正在添加依赖项,操作将等到依赖项完成后才开始。我只是想知道如果在运行时添加依赖项,是否有一些解决方法可以使正在运行的操作等待。
猜你喜欢
  • 1970-01-01
  • 2017-05-20
  • 2014-05-01
  • 1970-01-01
  • 2011-08-25
  • 1970-01-01
  • 1970-01-01
  • 2016-10-24
  • 2018-10-09
相关资源
最近更新 更多