iOS开发中任务分配是不可避免的,也有很多种解决方法。由于最近项目需求,自己写了一个简单的任务分配器,能方便地控制任务数量。
因此自己写一个任务数量控制的模块:
github链接:git@github.com:DarkKnightOne/NPDispatcher.git
使用场景:控制同时下载资源或者同时解压zip文件等的数量。
使用方法:
#import "WHTaskManager.h"
@property (nonatomic, strong) WHTaskManager *taskManager;
- 初始化,并执行同时执行的任务数量
_taskManager = [WHTaskManager taskWithMaxTaskCount:5];
- 任务处理,处理完成后删除任务
__weak typeof(self)weakSelf = self;
[_taskManager newTaskReachedBlock:^(NSArray<WHTask *> *tasks) {
NSLog(@"-- reach new task count = %ld", tasks.count);
for (int index = 0; index < tasks.count; index ++) {
WHTask *t = [tasks objectAtIndex:index];
[weakSelf.taskManager removeTask:t];
}
}];
5.创建任务
NSMutableArray *tasks = [NSMutableArray arrayWithCapacity:10];
for (int index = 0; index < 10; index ++) {
WHTask *task = [[WHTask alloc] init];
task.indentifier = index;
[tasks addObject:task];
}
[_taskManager addTasks:tasks];```
6.任务运行情况
2016-10-08 23:45:51.053488 WHTaskManager[1601:597558] -- reach new task count = 5
2016-10-08 23:45:51.053611 WHTaskManager[1601:597558] -- reach new task count = 1
2016-10-08 23:45:51.053634 WHTaskManager[1601:597558] -- reach new task count = 1
2016-10-08 23:45:51.053649 WHTaskManager[1601:597558] -- reach new task count = 1
2016-10-08 23:45:51.053663 WHTaskManager[1601:597558] -- reach new task count = 1
2016-10-08 23:45:51.053677 WHTaskManager[1601:597558] -- reach new task count = 1```
结论:
1.第一次分配了5个任务。
2.每运行一个任务时,删除一个任务,因此也有一个新任务过来。
3.最终保证了同时运行的任务数量为5.
github链接: https://github.com/zhang33121/WHTaskManager.git