当前位置: 首页 > news >正文

异步函数

 

#import "ViewController.h"

 

@interface ViewController ()

 

@end

 

@implementation ViewController

 

- (void)viewDidLoad {

    [super viewDidLoad];

 

    

    

}

 

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event

{

    NSLog(@"touchesBegan");

    // 异步函数 + 主队列

    // 结论:1.不会开启新线程

    //     2.任务按顺序执行

    dispatch_async(dispatch_get_main_queue(), ^{

        

         NSLog(@"耗时操作1:%@",[NSThread currentThread]);

    });

    

    dispatch_async(dispatch_get_main_queue(), ^{

        

        NSLog(@"耗时操作2:%@",[NSThread currentThread]);

    });

    

    dispatch_async(dispatch_get_main_queue(), ^{

        

        NSLog(@"耗时操作3:%@",[NSThread currentThread]);

    });

    NSLog(@"touchesEnd");

 

 

}

 

// 异步函数 + 并发队列

// 任务在子线程执行/会开启多条新线程

// 任务同时执行

// 并不是有多少任务就开启多少线程.

- (void)test2

{

    // 异步函数 + 并发队列

    // 任务在子线程执行/会开启多条新线程

    // 任务同时执行

    // 并不是有多少任务就开启多少线程.

    dispatch_async(dispatch_get_global_queue(0, 0), ^{

        NSLog(@"耗时操作1:%@",[NSThread currentThread]);

    });

    dispatch_async(dispatch_get_global_queue(0, 0), ^{

        NSLog(@"耗时操作2:%@",[NSThread currentThread]);

    });

    dispatch_async(dispatch_get_global_queue(0, 0), ^{

        NSLog(@"耗时操作3:%@",[NSThread currentThread]);

    });

    dispatch_async(dispatch_get_global_queue(0, 0), ^{

        NSLog(@"耗时操作4:%@",[NSThread currentThread]);

    });

    dispatch_async(dispatch_get_global_queue(0, 0), ^{

        NSLog(@"耗时操作5:%@",[NSThread currentThread]);

    });

    dispatch_async(dispatch_get_global_queue(0, 0), ^{

        NSLog(@"耗时操作6:%@",[NSThread currentThread]);

    });

    dispatch_async(dispatch_get_global_queue(0, 0), ^{

        NSLog(@"耗时操作7:%@",[NSThread currentThread]);

    });

    dispatch_async(dispatch_get_global_queue(0, 0), ^{

        NSLog(@"耗时操作8:%@",[NSThread currentThread]);

    });

}

 

 

// 异步函数 + 串行队列

// 结论: 1.开启一条线程,任务在新线程中执行.

//       2.任务按顺序执行,在同一条子线程执行.

//       3.一个队列对应一条线程

- (void)test1

{

    // 异步函数 + 串行队列

    // 结论: 1.开启一条线程,任务在新线程中执行.

    //       2.任务按顺序执行,在同一条子线程执行.

    //       3.一个队列对应一条线程

    dispatch_queue_t serialQueue1 = dispatch_queue_create("", DISPATCH_QUEUE_SERIAL);

    dispatch_queue_t serialQueue2 = dispatch_queue_create("", DISPATCH_QUEUE_SERIAL);

    

    dispatch_async(serialQueue1, ^{

        NSLog(@"耗时操作1:%@",[NSThread currentThread]);

    });

    

    dispatch_async(serialQueue2, ^{

        NSLog(@"耗时操作2:%@",[NSThread currentThread]);

    });

    

    dispatch_async(serialQueue2, ^{

        NSLog(@"耗时操作3:%@",[NSThread currentThread]);

    });

    

    dispatch_async(serialQueue1, ^{

        NSLog(@"耗时操作4:%@",[NSThread currentThread]);

    });

}

@end

转载于:https://www.cnblogs.com/R-X-L/p/4777563.html

相关文章:

  • Android框架之Volley
  • OC变量数据类型
  • win7 蛋疼的时间格式转化
  • MacBook: 安装Mac OS X与多分区Windows双系统完美教程
  • ecshop如何判断缓存文件是否能更新
  • 登录信息提示
  • 某银行网银代发工资无法操作问题解决
  • SpringMVC文件上传
  • Magento 1.x 中文订单打印乱码
  • ios 控件代码transform学习笔记
  • DataTable和Xml互相转化
  • 机器学习温和指南
  • 打印xls注意事项
  • JSPpage与pageContext什么关系
  • django 1.8 官方文档翻译:13-3 日志
  • 【comparator, comparable】小总结
  • 【笔记】你不知道的JS读书笔记——Promise
  • css系列之关于字体的事
  • happypack两次报错的问题
  • JWT究竟是什么呢?
  • Python学习之路16-使用API
  • Redis提升并发能力 | 从0开始构建SpringCloud微服务(2)
  • vue的全局变量和全局拦截请求器
  • Yeoman_Bower_Grunt
  • 复习Javascript专题(四):js中的深浅拷贝
  • 观察者模式实现非直接耦合
  • 基于Volley网络库实现加载多种网络图片(包括GIF动态图片、圆形图片、普通图片)...
  • 开发基于以太坊智能合约的DApp
  • 聊聊hikari连接池的leakDetectionThreshold
  • 盘点那些不知名却常用的 Git 操作
  • 前端
  • 前端学习笔记之观察者模式
  • 容器化应用: 在阿里云搭建多节点 Openshift 集群
  • 如何解决微信端直接跳WAP端
  • 时间复杂度与空间复杂度分析
  • 跳前端坑前,先看看这个!!
  • 写代码的正确姿势
  • 在weex里面使用chart图表
  • raise 与 raise ... from 的区别
  • ​2021半年盘点,不想你错过的重磅新书
  • ​DB-Engines 11月数据库排名:PostgreSQL坐稳同期涨幅榜冠军宝座
  • # Pytorch 中可以直接调用的Loss Functions总结:
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第5节(封闭类和Final方法)
  • (Python) SOAP Web Service (HTTP POST)
  • (分享)一个图片添加水印的小demo的页面,可自定义样式
  • (附源码)spring boot车辆管理系统 毕业设计 031034
  • (一)80c52学习之旅-起始篇
  • (转)Unity3DUnity3D在android下调试
  • ****** 二 ******、软设笔记【数据结构】-KMP算法、树、二叉树
  • ***原理与防范
  • .Net Core 中间件验签
  • .Net 高效开发之不可错过的实用工具
  • .NET 自定义中间件 判断是否存在 AllowAnonymousAttribute 特性 来判断是否需要身份验证
  • .NET/C# 使用 ConditionalWeakTable 附加字段(CLR 版本的附加属性,也可用用来当作弱引用字典 WeakDictionary)
  • .netcore 如何获取系统中所有session_ASP.NET Core如何解决分布式Session一致性问题