我有一个数据加载操作需要从主线程运行以避免潜在的阻塞问题。为此,我使用了 NSOperationQueue 和 NSOperations。
然而,已经出现的一个问题是存在一种操作以根据传入的信息产生额外的操作。尝试解决这个问题也解决了我在其他地方遇到的一些小问题,因为我遇到的解决方案是给 NSOperation 它自己的子任务队列。
问题是,一旦“main”退出,NSOperation 就会被标记为“finished”,无论子队列是否完成处理;如何覆盖该行为?
我有一个数据加载操作需要从主线程运行以避免潜在的阻塞问题。为此,我使用了 NSOperationQueue 和 NSOperations。
然而,已经出现的一个问题是存在一种操作以根据传入的信息产生额外的操作。尝试解决这个问题也解决了我在其他地方遇到的一些小问题,因为我遇到的解决方案是给 NSOperation 它自己的子任务队列。
问题是,一旦“main”退出,NSOperation 就会被标记为“finished”,无论子队列是否完成处理;如何覆盖该行为?
waitUntilAllOperationsAreFinished
您可以在退出操作主方法之前向您的子队列发送消息。这很容易,但不是一个好主意,因为它阻塞了一个相当浪费的整个线程。
更好的解决方案是使用依赖系统。创建另一个依赖于您的主操作的操作。创建子操作后,还将它们作为依赖项添加到新的“完成”操作中。
一旦“main”退出,NSOperation 就会被标记为“finished”,
这个逻辑是在 中实现的[NSOperation start]
,所以你只需要用你的自定义逻辑覆盖它:调用main
,它会产生一些额外的操作,在完成后设置isFinished
操作的状态。