GCD之全局、主线程
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
-(NSString *)fetchData{ [NSThread sleepForTimeInterval:1]; return @"Hello world";}-(NSString *)firstCast:(NSString *)data{ [NSThread sleepForTimeInterval:2]; return [data uppercaseString];}-(NSString *)secondCast:(NSString *)data{ [NSThread sleepForTimeInterval:3]; return [data stringByReplacingOccurrencesOfString:@"0" withString:@"o"];}-(NSInteger)thrid:(NSString *)data{ [NSThread sleepForTimeInterval:4]; return [data length]; } |
1.在View中放置一个UIButton按钮和一个UITextView,在按钮点击事件中调用上面的方法
2.按钮执行方法顺序如下:
|
1
2
3
4
5
6
7
8
|
- (IBAction)btnclick:(id)sender { //__block 声明变量可在block中修改 否则只有只读权限 __block int a=10; NSDate *startTiem=[NSDate date]; //对于全局队列(并行队列) 声明时第一个参数有三种:四种对应的是不同的全局队列 第二个参数目前未使用 始终为0 //1.DISPATCH_QUEUE_PRIORITY_DEFAULT //2.DISPATCH_QUEUE_PRIORITY_HIGH //3.DISPATCH_QUEUE_PRIORITY_LOW <br> //4.DISPATCH_QUEUE_PRIORITY_BACKGROUND |
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
dispatch_queue_t queue=dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0); //dispatch_async 开启异步线程 dispatch_async(queue, ^{ NSString *fetchstring= [self fetchData]; NSString *firststring=[self firstCast:fetchstring]; NSString *secondstring=[self secondCast:firststring]; NSInteger length =[self thrid:fetchstring]; NSDate *endtime=[NSDate date]; //对于UI的更新获取值都在主线程中 此时要用主线程来更新 主 线程是串行队列 dispatch_async(dispatch_get_main_queue(), ^{ self.textview.text=secondstring; }); a=9;//若未在声明变量时使用__block 时将会报错不能编译 NSLog(@"%@",[NSString stringWithFormat:@"%ld %@",length,secondstring]); NSLog(@"%f",[endtime timeIntervalSinceDate:startTiem]); });} |
3.输出结果

GCD之全局、主线程的更多相关文章
- iOS-多线程--介绍NSThread和GCD及其它们的线程通讯示例
前言:下面就不一一列出 pthread.NSThread.GCD.NSOperation 的完整的各种方法了,只分别将最常用的列出来,以便偶尔瞄一眼. 一.NSThread 1> 线程间的通讯/ ...
- 转数据库分库分表(sharding)系列(二) 全局主键生成策略
本文将主要介绍一些常见的全局主键生成策略,然后重点介绍flickr使用的一种非常优秀的全局主键生成方案.关于分库分表(sharding)的拆分策略和实施细则,请参考该系列的前一篇文章:数据库分库分表( ...
- 数据库分库分表(sharding)系列(二) 全局主键生成策略
本文将主要介绍一些常见的全局主键生成策略,然后重点介绍flickr使用的一种非常优秀的全局主键生成方案.关于分库分表(sharding)的拆分策略和实施细则,请参考该系列的前一篇文章:数据库分库分表( ...
- Delphi CreateProcess 创建一个新的进程和它的主线程
Delphi CreateProcess WIN32API函数CreateProcess用来创建一个新的进程和它的主线程,这个新进程运行指定的可执行文件 CreateProcess百科名片 WIN32 ...
- DB 分库分表(2):全局主键生成策略
DB 分库分表(2):全局主键生成策略 本文将主要介绍一些常见的全局主键生成策略,然后重点介绍flickr使用的一种非常优秀的全局主键生成方案.关于分库分表(sharding)的拆分策略和实施细则,请 ...
- C# 多线程join的用法,等待多个子线程结束后再执行主线程
等待多个子线程结束后再执行主线程 class MultiThread{ #region join test public void MultiThreadTest() { Thread[] ths = ...
- Unity多线程(Thread)和主线程(MainThread)交互使用类——Loom工具分享
Unity多线程(Thread)和主线程(MainThread)交互使用类——Loom工具分享 By D.S.Qiu 尊重他人的劳动,支持原创,转载请注明出处:http.dsqiu.iteye.com ...
- C#新开一个线程取到数据,如何更新到主线程UI上面
一:问题 之前有被面试官问过,在WinForm中,要去网络上获取数据,由于网络环境等原因,不能很快的完成,因此会发生进程阻塞,造成主进程假死的现象,需要怎么解决? 二:思路 因此,往往是新 ...
- Android ActivityThread(主线程或UI线程)简介
1. ActivityThread功能 它管理应用进程的主线程的执行(相当于普通Java程序的main入口函数),并根据AMS的要求(通过IApplicationThread接口,AMS为Client ...
随机推荐
- Eclipse字体颜色的设置方法
Eclipse字体颜色的设置方法.. ----------------- .---------------------此时我们就希望设置一下字体eclipse字体颜色,让他像其它编辑器一样的,有不同的 ...
- python使用环境的设置
virtualenv usage mkidr ~/pyenv cd ~/pyenv virtualenv pycaffe #it will setup a new python environtmen ...
- 如何利用Jmeter做代理录制脚本
如果对于这个Jmeter不太会使用的童鞋,可以去参考其他的教学文档,本文只提供Jmeter的代理使用. 第一步:添加线程组
- JavaPOI处理Excel
java处理excel,心得分享如下,如有不妥或者需要补充的地方,敬请指出,欢迎随时交流 1.加载excel,获得workbook对象 fileTemp = new File(pathOfMExce ...
- js动态获取时间的方式
列子的时间是这样实现的."2017/7/25 下午10:27:11 星期二" 列子中有一个div用来放时间. 每隔1s执行一次函数,秒就会变. function showTime( ...
- Web.py 框架学习笔记 - ctx
摘要: ctx用于存取web请求的环境变量,基于ThreadedDict类进行实例化.ThreadedDict类可实例化字典类型的对象,该对象某些属性可用于存取处理线程的id. 这样字典化实例的线程池 ...
- 编译安装httpd 2.4
author:JevonWei 版权声明:原创作品 官方网站下载httpd2.4.apr及apr-util的相关软件包,并传输到centos 7系统中的/usr/local/src(apr1.6版本过 ...
- 最常见的三个排序(冒泡、直接插入、快速)的JS实现
//冒泡排序function bubble(arr){ for(var i=0;i<arr.length;i++){ for(var j=0;j<arr.length-i;j++){ if ...
- IOS学习[Swift中跳转与传值]
Swift中页面跳转与传值: 1.简单方式 首先,Swift的跳转可分为利用xib文件跳转与storyboard跳转两种方法,我这里选择使用storyboard的界面跳转方法. 1.通过在storyb ...
- poj 3683 2-sat建图+拓扑排序输出结果
发现建图的方法各有不同,前面一题连边和这一题连边建图的点就不同,感觉这题的建图方案更好. 题意:给出每个婚礼的2个主持时间,每个婚礼的可能能会冲突,输出方案. 思路:n个婚礼,2*n个点,每组点是对称 ...