一个支持在执行过程中快速和轻松地重新排序、优先级排序和取消子队列和进程的 NSOperations 的二维串行队列。
需要按顺序执行的长运行过程,可以被归类到子类别中,并且可能需要添加到队列后进行排序或修改。
示例:为应用的不同部分下载大型文件。
Q2D 可以将所有下载排队。然后根据用户交互,可以优先执行某些下载而不是其他下载。
Q2D 目前仅支持串行执行。
Cocoapods 是安装 Q2D 的最简单方法。将以下行添加到 podfile
pod 'Q2D'
或者将文件复制到您的项目中
Q2D.h
Q2D.m
Q2DOperationQueue.h
Q2DOperationQueue.m
导入 Q2D.h
Q2D *queue = [[Q2D alloc] init];
NSOperation *myOperation = [[NSOperation alloc] init];
[queue enqueueOperation:myOperation withID:@"myUniqueOperationID" toSubqueueWithID:@"mySubqueueID"];
// or
[queue enqueueOperationWithBlock:^{
// perform tasks
}withID:@"otherUniqueOperationID" toSubqueueWithID:@"otherSubqueueID"];
一旦添加了 NSOperations,Q2D 将自动开始执行
[queue prioritizeSubqueueWithID:@"mySubqueueID"];
[queue cancelSubqueueWithID:@"mySubqueueID"];
[queue setPriorityLevel:NSOperationQueuePriorityHigh forOperationWithID:@"myUniqueOperationID" inSubqueueID:@"mySubqueueID"];
[queue cancelOperationWithID:@"myUniqueOperationID" inSubqueueWithID:@"mySubqueueID"];
可以在任何时候进行优先级排序和取消操作
默认情况下,添加到队列中的任何操作将立即开始执行。这可以通过 startsAutomatically
进行配置
queue.startsAutomatically = NO
如果将 startsAutomatically
设置为 NO,则队列需要调用 [queue resume]
来开始执行。
如果在队列包含 NSOperations 时从 NO 更改为 YES,则开始执行第一个操作。
如果从 YES 更改为 NO,则将暂停执行。
队列的打印输出可用于调试。建议在 [queue pause]
之前和 [queue resume]
之后调用
[queue pause];
[queue printContentsOfQueue];
[queue resume];
回调方法以提供队列执行更新
- (void)subqueueWasAdded:(NSString *)name;
- (void)subqueueWasCancelled:(NSString *)name;
- (void)subqueueDidBegin:(NSString *)name;
- (void)subqueueDidComplete:(NSString *)name;
- (void)queueDidComplete;
注意:不应依赖于 Q2DDelegate 方法。子队列可能会发送消息多次,尤其是在重新排序或晚排队时。它们旨在用作队列状态的简单更新。