大佬教程收集整理的这篇文章主要介绍了ios – 如何取消NSOperation的依赖项?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
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)re@R_262_10930@iveCancel:(NSOperation *)op { [op cancel]; for (NSOperation *dep in op.dependencies) { [self re@R_262_10930@iveCancel:op]; } }
您可以考虑编写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的依赖项?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。