NSOperationQueue 创建线程
来源:互联网 发布:兴业银行淘宝网银支付 编辑:程序博客网 时间:2024/06/06 16:39
NSInvocationOperation 创建线程
// 创建队列 NSOperationQueue *queue = [[NSOperationQueue alloc] init]; // 创建操作 NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(download) object:nil]; // operation直接调用start,是同步执行(在当前线程执行操作)// [operation start]; // 添加操作到队列中,会自动异步执行 [queue addOperation:operation]
NSBlockOperation 创建线程
- (void)viewDidLoad{ [super viewDidLoad]; NSBlockOperation *operation1 = [NSBlockOperation blockOperationWithBlock:^{ NSLog(@"---下载图片----11---%@", [NSThread currentThread]); }]; [operation1 addExecutionBlock:^{ NSLog(@"---下载图片----12---%@", [NSThread currentThread]); }]; NSBlockOperation *operation2 = [NSBlockOperation blockOperationWithBlock:^{ NSLog(@"---下载图片----2---%@", [NSThread currentThread]); }]; NSBlockOperation *operation3 = [NSBlockOperation blockOperationWithBlock:^{ NSLog(@"---下载图片----3---%@", [NSThread currentThread]); }]; NSBlockOperation *operation4 = [NSBlockOperation blockOperationWithBlock:^{ NSLog(@"---下载图片----4---%@", [NSThread currentThread]); }]; // 1.创建队列 NSOperationQueue *queue = [[NSOperationQueue alloc] init]; // 主队列// NSOperationQueue *queue = [NSOperationQueue mainQueue]; // 2.添加操作到队列中(自动异步执行) [queue addOperation:operation1]; [queue addOperation:operation2]; [queue addOperation:operation3]; [queue addOperation:operation4];}- (void)test{ // NSBlockOperation *operation = [NSBlockOperation blockOperationWithBlock:^{ // NSLog(@"---下载图片----1---%@", [NSThread currentThread]); // }]; NSBlockOperation *operation = [[NSBlockOperation alloc] init]; [operation addExecutionBlock:^{ NSLog(@"---下载图片----1---%@", [NSThread currentThread]); }]; [operation addExecutionBlock:^{ NSLog(@"---下载图片----2---%@", [NSThread currentThread]); }]; [operation addExecutionBlock:^{ NSLog(@"---下载图片----3---%@", [NSThread currentThread]); }]; [operation start]; // 任务数量 > 1,才会开始异步执行}
线程间的依赖
- (void)dependency{ /** 假设有A、B、C三个操作,要求: 1. 3个操作都异步执行 2. 操作C依赖于操作B 3. 操作B依赖于操作A */ // 1.创建一个队列(非主队列) NSOperationQueue *queue = [[NSOperationQueue alloc] init]; // 2.创建3个操作 NSBlockOperation *operationA = [NSBlockOperation blockOperationWithBlock:^{ NSLog(@"A1---%@", [NSThread currentThread]); }]; // [operationA addExecutionBlock:^{ // NSLog(@"A2---%@", [NSThread currentThread]); // }]; // // [operationA setCompletionBlock:^{ // NSLog(@"AAAAA---%@", [NSThread currentThread]); // }]; NSBlockOperation *operationB = [NSBlockOperation blockOperationWithBlock:^{ NSLog(@"B---%@", [NSThread currentThread]); }]; NSBlockOperation *operationC = [NSBlockOperation blockOperationWithBlock:^{ NSLog(@"C---%@", [NSThread currentThread]); }]; // 设置依赖 [operationB addDependency:operationA]; [operationC addDependency:operationB]; // 3.添加操作到队列中(自动异步执行任务) [queue addOperation:operationC]; [queue addOperation:operationA]; [queue addOperation:operationB];}
线程的最大并发数
- (void)maxCount{ // 1.创建一个队列(非主队列) NSOperationQueue *queue = [[NSOperationQueue alloc] init]; // 2.设置最大并发(最多同时并发执行3个任务) queue.maxConcurrentOperationCount = 3; // 3.添加操作到队列中(自动异步执行任务,并发) NSBlockOperation *operation1 = [NSBlockOperation blockOperationWithBlock:^{ NSLog(@"下载图片1---%@", [NSThread currentThread]); }]; NSBlockOperation *operation2 = [NSBlockOperation blockOperationWithBlock:^{ NSLog(@"下载图片2---%@", [NSThread currentThread]); }]; NSBlockOperation *operation3 = [NSBlockOperation blockOperationWithBlock:^{ NSLog(@"下载图片3---%@", [NSThread currentThread]); }]; NSBlockOperation *operation4 = [NSBlockOperation blockOperationWithBlock:^{ NSLog(@"下载图片4---%@", [NSThread currentThread]); }]; NSInvocationOperation *operation5 = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(download) object:nil]; [queue addOperation:operation1]; [queue addOperation:operation2]; [queue addOperation:operation3]; [queue addOperation:operation4]; [queue addOperation:operation5]; [queue addOperationWithBlock:^{ NSLog(@"下载图片5---%@", [NSThread currentThread]); }]; [queue addOperationWithBlock:^{ NSLog(@"下载图片6---%@", [NSThread currentThread]); }]; [queue addOperationWithBlock:^{ NSLog(@"下载图片7---%@", [NSThread currentThread]); }]; [queue addOperationWithBlock:^{ NSLog(@"下载图片8---%@", [NSThread currentThread]); }]; [queue addOperationWithBlock:^{ NSLog(@"下载图片9---%@", [NSThread currentThread]); }]; [queue cancelAllOperations];}
#
阅读全文
0 0
- NSOperationQueue 创建线程
- 使用NSOperationQueue起线程
- NSOperationQueue 方式开启线程
- 线程池NSOperationQueue
- GCD NSOperationQueue线程依赖
- NSOperationQueue管理线程(转)
- NSOperationQueue、NSRunLoop和线程安全
- NSOperationQueue、NSRunLoop和线程安全
- 多线程之NSOperationQueue(线程队列)
- NSOperationQueue 线程池的使用
- NSOperationQueue 线程挂起,添加依赖
- NSOperationQueue、NSRunLoop和线程安全
- NSOperationQueue
- NSOperationQueue
- NSOperationQueue
- NSOperationQueue
- NSOperationQueue
- NSOperationQueue
- 26--- 数据库&MySQL(上)
- window搭建git远程仓库
- 从零开始学_JavaScript_系列(42)——简述js的八种继承方式
- qwb与神奇的序列 快速幂 非逆元 矩阵快速幂
- Java--数据类型
- NSOperationQueue 创建线程
- 使用Gradle构建SpringBoot工程系列:第二篇:开发环境准备
- 回到主线程的3种方式
- Leetcode Week15
- 2017 山理校赛 线段树单点更新+状压
- dp与px转换工具类
- Cookie学习总结
- Android 进阶13:几种进程通信方式的对比总结
- 191.m1-Fragment页面优化,继承BaseFragment