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 ...
随机推荐
- <花儿与少年>之一些很喜欢的台词收藏
花儿与少年... ================= 作为一个普通观众,现在这样的花少冒险之旅很好,有旅行.有冒险.有不和.有理解,有时候节目为了效果要制造一些争锋相对的场面,但是除此之外,整个节目质 ...
- Ajax新玩法fetch API
目前 Web 异步应用都是基于 XMLHttpRequest/ActiveXObject (IE)实现的, 这些对象不是专门为资源获取而设计的,因而它们的 API 非常复杂,同时还需要开发者处理兼容性 ...
- 转每天一个linux命令(3):pwd命令
Linux中用 pwd 命令来查看"当前工作目录"的完整路径. 简单得说,每当你在终端进行操作时,你都会有一个当前工作目录. 在不太确定当前位置时,就会使用pwd来判定当前目录在文 ...
- LF模式是个坑,ZeroIce中间件让你体会这个痛
LF模式是个坑,一个小小的失误就可能使你的网络处理瘫痪,Ice就很好地展现了出来,换句话说,Ice中间件或是LF模式就是一个坑,如果你一不小心. LF模式的官方论文中,论述了此模式用于高性能网络并发模 ...
- 微信原图泄露的只能是 Exif ,你的隐私不在这!!!
版权声明: 本账号发布文章均来自公众号,承香墨影(cxmyDev),版权归承香墨影所有. 每周会统一更新到这里,如果喜欢,可关注公众号获取最新文章. 未经允许,不得转载. 序 最近很多公众号都推送了关 ...
- jQuery圣诞雪花
<script type="text/javascript"> $(function(){ var d="<div class='y_snow'> ...
- bam文件softclip , hardclip ,markduplicate的探究
测序产生的bam文件,有一些reads在cigar值里显示存在softclip,有一些存在hardclip,究竟softclip和hardclip是怎么判断出来的,还有是怎么标记duplicate ...
- Java - 9个处理异常的最佳准则
其实工作这么久了一直都没搞清楚到底如何来处理异常,偶然看到一篇外文感觉还不错,便把它翻译了下来,原文链接位于本文末尾处. 在java中处理异常并不是一件简单的事,不止初学者觉得它难以理解甚至连有经验的 ...
- jmeter+ant+jenkins 搭建接口自动化测试
一.jmeter 我用的jmeter3.2 jmeter要运行,必须本地有java环境,所以需要配置jdk什么的,自行配置 二.ant 安装ant 第一步:下载ant http://ant.a ...
- CVTE前端笔试编程题
这些题目是做完笔试之后,在别的地方找到的,现在附上. 1.(1)这题考察的怎么把参数转换为数组,然后再截取你想要的位数. function C(){ var a_args=Array.prototyp ...