ios – 如何取消NSOperation的依赖项?

ios – 如何取消NSOperation的依赖项?,第1张

概述我在依赖图中有一些NSOperations: NSOperation *op1 = ...;NSOperation *op2 = ...;[op2 addDependency:op1]; 这是我如何运行它们: NSOperationQueue *queue = [[NSOperationQueue alloc] init];[queue addOperation:op1];[queue 我在依赖图中有一些NSOperations:
NSOperation *op1 = ...;NSOperation *op2 = ...;[op2 addDependency:op1];

这是我如何运行它们:

NSOperationQueue *queue = [[NSOperationQueue alloc] init];[queue addOperation:op1];[queue addOperation:op2];

现在我需要取消它们.如何确保取消依赖关系图中的所有NSOperations,并且不会取消其他NSOperations?

我尝试过的:

在NSOperation上调用取消不会取消另一个(据我所知):

[op1 cancel]; // doesn't cancel op2// -- or --[op2 cancel]; // doesn't cancel op1

取消队列也会取消不属于op1和op2的依赖关系图的 *** 作(如果队列中有任何此类 *** 作):

[queue cancelAllOperations];

所以我使用自定义方法解决了这个问题,该方法以递归方式查看NSOperation的依赖关系并取消它们.但是,我对这个解决方案不满意,因为我觉得我正在与框架作斗争:

- (voID)recursiveCancel:(NSOperation *)op{    [op cancel];    for (NSOperation *dep in op.dependencIEs)    {        [self recursiveCancel:op];    }}
解决方法 不存在NSOperation自动取消其依赖关系的概念.这是因为多个NSOperations可能依赖于相同的其他NSOperation.依赖关系严格存在以延迟特定NSOperation的执行,直到其所有依赖关系NSOperations完成.

您可以考虑编写NSOperation的子类:

@interface NSOperationOnetoOne : NSOperation- (voID)addOnetoOneDependency:(NSOperation *)operation;- (voID)removeOnetoOneDependency:(NSOperation *)operation;@end@implementation NSOperationOnetoOne {  NSMutableArray *onetoOneDependencIEs;}- (voID)addOnetoOneDependency:(NSOperation *)operation {  [onetoOneDependencIEs addobject:operation];  [self addDependency:operation];}- (voID)removeOnetoOneDependency:(NSOperation *)operation {  [onetoOneDependencIEs removeObject:operation];  [self removeDependency:operation];}- (voID)cancel {  [super cancel];  [onetoOneDependencIEs makeObjectsPerformSelector:@selector(cancel)];}@end

注意:上述代码不保证没有错误.

总结

以上是内存溢出为你收集整理的ios – 如何取消NSOperation的依赖项?全部内容,希望文章能够帮你解决ios – 如何取消NSOperation的依赖项?所遇到的程序开发问题。

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

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

原文地址: https://outofmemory.cn/web/1108175.html

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

发表评论

登录后才能评论

评论列表(0条)

保存