博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
多线程-NSOperation
阅读量:6832 次
发布时间:2019-06-26

本文共 1446 字,大约阅读时间需要 4 分钟。

1、NSOperationQueue有两种不同类型的队列:主队列和自定义队列

  a、主队列运行在主线程上

  b、自定义队列在后台运行

2、操作步骤

  a、定义操作队列

  b、定义操作

  c、将操作添加到队列中(一旦将操作添加到队列中,操作就会立即被调度执行)

3、例子

    // 0、定义队列
  self.myQueue = [[NSOperationQueue alloc] init];

  // 1、定义操作

  NSBlockOperation *op = [NSBlockOperation blockOperationWithBlock:^{
    [self operationAction:@"Block Operation"];
  }];

  // 2、将操作添加到队列
  [self.myQueue addOperation:op];

4、顺序执行,要设置依赖

   NSBlockOperation *op1 = [NSBlockOperation blockOperationWithBlock:^{
         NSLog(@"下载图片 %@", [NSThread currentThread]);
     }];
     NSBlockOperation *op2 = [NSBlockOperation blockOperationWithBlock:^{
         NSLog(@"修饰图片 %@", [NSThread currentThread]);
     }];
       NSBlockOperation *op3 = [NSBlockOperation blockOperationWithBlock:^{
         NSLog(@"保存图片 %@", [NSThread currentThread]);
     }];
     NSBlockOperation *op4 = [NSBlockOperation blockOperationWithBlock:^{
         NSLog(@"更新UI %@", [NSThread currentThread]);
     }];
    
   // 设定执行顺序, Dependency依赖,可能会开多个,但不会太多
     // 依赖关系是可以跨队列的!
     [op2 addDependency:op1];
     [op3 addDependency:op2];
     [op4 addDependency:op3];
    
  // 把操作添加到队列中
     [self.myQueue addOperation:op1];
     [self.myQueue addOperation:op2];
     [self.myQueue addOperation:op3];
     // 所有UI的更新需要在主线程上进行
     [[NSOperationQueue mainQueue] addOperation:op4];
 
5、设置最大线程的数量
   [self.myQueue setMaxConcurrentOperationCount:1];
 
  
// 新建线程是有开销的
    // 在设定同时并发的最大线程数时,如果前一个线程工作完成,但是还没有销毁,会新建线程
    // 应用场景:网络开发中,下载工作!(线程开销:CPU,MEM)电量!
    // 如果是3G,开3个子线程
    // 如果是WIFI,开6个子线程 

 

转载于:https://www.cnblogs.com/jianghong/p/4700528.html

你可能感兴趣的文章
SpringMVC由浅入深day01_7入门程序小结
查看>>
three.js
查看>>
一个简单的统计图像主颜色的算法(C#源代码)
查看>>
java开发中的重中之重-------mysql(基础篇)
查看>>
While 나가는 법
查看>>
c语言操作符的优先级
查看>>
Codeforces Round #420 (Div. 2) A-E
查看>>
9.4-9.19 h5日记总结
查看>>
mysql支持的存储引擎
查看>>
input checkbox复选框取值
查看>>
SimpleAdapter
查看>>
一 python并发编程之多进程
查看>>
Socket通信
查看>>
less文件编译成微信小程序wxss文件
查看>>
viewport 学习
查看>>
jackson详解
查看>>
Python-JS事件与面向对象操作
查看>>
Linux启动过程总结
查看>>
nexus搭建maven私服
查看>>
新建android工程的时候eclipse没有生成MainActivity和layout布局
查看>>