Q2D 0.2.1

Q2D 0.2.1

测试已测试
Lang语言 Obj-CObjective C
许可证 自定义
发布最新发布2015年2月

Justin Poliachik 维护。



Q2D 0.2.1

  • Justin Poliachik

一个支持在执行过程中快速和轻松地重新排序、优先级排序和取消子队列和进程的 NSOperations 的二维串行队列。

Q2D 的用途

  • 需要按顺序执行的长运行过程,可以被归类到子类别中,并且可能需要添加到队列后进行排序或修改。

    • 示例:为应用的不同部分下载大型文件。

      Q2D 可以将所有下载排队。然后根据用户交互,可以优先执行某些下载而不是其他下载。

Q2D 目前仅支持串行执行。

安装

Cocoapods 是安装 Q2D 的最简单方法。将以下行添加到 podfile

pod 'Q2D'

v0.1

或者将文件复制到您的项目中

Q2D.h
Q2D.m
Q2DOperationQueue.h
Q2DOperationQueue.m

使用方法

导入 Q2D.h

初始化

Q2D *queue = [[Q2D alloc] init];

添加 NSOperations
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];

Q2DDelegate

回调方法以提供队列执行更新

- (void)subqueueWasAdded:(NSString *)name;
- (void)subqueueWasCancelled:(NSString *)name;
- (void)subqueueDidBegin:(NSString *)name;
- (void)subqueueDidComplete:(NSString *)name;
- (void)queueDidComplete;

注意:不应依赖于 Q2DDelegate 方法。子队列可能会发送消息多次,尤其是在重新排序或晚排队时。它们旨在用作队列状态的简单更新。

未来改进

  • 提高代理方法的可靠性和一致性
  • 队列检查方法以供调试使用