swift 多线程及GCD
1、基本概念
1)进程:
进程是指在系统中正在运行的一个应用程序。每个进程之间是独立的,每个进程运行在其专用且受保护的内存空间里。某进程内的线程在其它进程不可见
2)线程:
1个进程要执行任务,必须有线程,每个进程必须至少拥有一个线程,线程是进程的基本执行单元,一个进程的所有任务都在线程中执行
3)多线程:
一个进程中可以开启多个线程,每个线程可以并行执行不同的任务
多线程并发及原理:并行即同时执行,比如同时开启三个线程分别下载3个文件。 在同一个时间里,CPU只能处理一条线程,只有1条线程在执行。多线程同时执行,其实是CPU快速的在多个线程之间进行切换,如果切换线程的时间足够快,就造成了多线程并发执行的假象
2、多线程在开发中的应用
在iOS的开发中为了提高程序的运行效率会把比较耗时的操作放在自线程中去执行,iOS系统进程默认会开启i一个主线程,用来响应用户的手势操作以及UI刷新,因此主线程又叫做UI线程
1)延迟执行
最简单粗暴的方式就是对线程本身执行挂起操作
Thread .sleep(forTimeInterval: 2.0)
另外使用隐式创建开启线程的方法
self .perform(#selector(doSomething), with: nil, afterDelay: 2.0)
使用GCD处理延迟操作
// 指定时间后执行
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 3.0) {
print("after3.0!")
}
2)只执行一次
swift3.0废弃了dispatch_once API,文档中只提示Use lazily initialized globals instead。但是看了这句话之后并不知道该怎么做,原来自从swift 1.x开始swift就已经开始用dispatch_one机制在后台支持线程安全的全局lazy初始化和静态属性.所以static var背后已经在使用dispatch_once了。
SO 我们在swift3.0中使用单例可以用以下几种方法:
1.。。。使用全局常量
let sb = SomeClass()
更多的内容以后再补充
3、DispatchQueue
Dispatch的全局函数不再是下划线的风格,也就是说他变成了一个更符合swift风格的DispatchQueue
首先来看一个基本的实现 注释都在代码里
DispatchQueue.global().async {
print("开始执行异步任务")
Thread.sleep(forTimeInterval: 10)
print("异步任务执行完毕")
DispatchQueue.main.async {
print("回到住线程刷新UI")
} }
我们使用 DispatchQueue . global ( ) 获取一个系统的队列,这样的话获取的就是默认 . default 优先级的队列了,如果要获取其他优先级的队列,就使用 DispatchQueue. global ( qos : . userInitiated ) ,最后,我们使用 . async { } 来执行代码:
一共有四个优先级
.userInitiated
.default
.utility
.background
DispatchQueue.global(qos: .background).async {
print("这是一个系统阵列的优先级 代表")
}
创建一个阵列
let oneQueue = DispatchQueue.init(label: "一个傻逼一样的阵列") oneQueue.async {
print("卧槽 我创建的这个阵列竟然活了")
}
4、操作阵列
http://blog.csdn.net/jiandanjinxin/article/details/50555903 好累 不写了
swift 多线程及GCD的更多相关文章
- iOS 开发多线程篇—GCD的常见用法
iOS开发多线程篇—GCD的常见用法 一.延迟执行 1.介绍 iOS常见的延时执行有2种方式 (1)调用NSObject的方法 [self performSelector:@selector(run) ...
- iOS开发多线程篇—GCD介绍
iOS开发多线程篇—GCD介绍 一.简单介绍 1.什么是GCD? 全称是Grand Central Dispatch,可译为“牛逼的中枢调度器” 纯C语言,提供了非常多强大的函数 2.GCD的优势 G ...
- iOS开发多线程篇—GCD的基本使用
iOS开发多线程篇—GCD的基本使用 一.主队列介绍 主队列:是和主线程相关联的队列,主队列是GCD自带的一种特殊的串行队列,放在主队列中得任务,都会放到主线程中执行. 提示:如果把任务放到主队列中进 ...
- iOS开发多线程篇—GCD的常见用法
iOS开发多线程篇—GCD的常见用法 一.延迟执行 1.介绍 iOS常见的延时执行有2种方式 (1)调用NSObject的方法 [self performSelector:@selector(run) ...
- [iOS]多线程和GCD
新博客wossoneri.com 进程和线程 进程 是指在系统中正在运行的一个应用程序. 每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内. 比如同时打开QQ.Xcode,系统就会分别 ...
- iOS开发多线程篇—GCD简介
iOS开发多线程篇—GCD介绍 一.简单介绍 1.什么是GCD? 全称是Grand Central Dispatch,可译为“牛逼的中枢调度器” 纯C语言,提供了非常多强大的函数 2.GCD的优势 G ...
- swift版的GCD封装
swift版的GCD封装 说明 本人针对swift封装了GCD,包括GCDQueue,GCDGroup,GCDTimer以及GCDSemaphore,使用较为便利. 源码 https://github ...
- 关于Xcode正确运行swift多线程
想跳过废话直接看解决方案的可以点击这里直接跳转,我这人写博客喜欢瞎逼逼. 还有一些我看过的不错的多线程资料,在此给出链接,点击这里直接跳转查看. 近来为了做操作系统课程设计,不得不去学习了下多线程. ...
- swift多线程定时器
swift多线程定时器的使用 func countDown(_ timeOut:Int,view: UIView){ var timeout = timeOut let queue:DispatchQ ...
随机推荐
- ACM water
1000 纯属适应题 1003 做的时候花了很久,现在看好像也不难 1004 适应题,求下平均就行 1005 要读懂题就行 1007 逆序数,discuss方法 1046 全部暴搜一遍.. ...
- SDK Manager 中 没有 Support Library怎么弄?
SDK Manager 中 没有 Support Library怎么弄?求大神帮忙 百度上面说的基本都试了,依旧没有弄出来 点击"Packages" > "Show ...
- app后端设计(12)--图片的处理
app上线后,不断接受用户的反馈,于是,反馈非常差的情况下,都会有app的改版. 一旦app的改版,都会有比较大的UI改动,一改动UI,那么图片的尺寸也就必须要改变. 在app后端设计(1)—api( ...
- SSL安全证书-概念解析
一.关于证书 数字证书是一种认证机制.简单点说,它代表了一种由权威机构颁发授权的安全标志. 由来 在以前,传统网站采用HTTP协议进行数据传输,所有的数据几乎都用的明文,很容易发生隐私泄露.为了解决安 ...
- github上传本地项目
github上传本地项目,分为两个部分: 1.如果建立了ssh key的,直接看第二部分的上传部分就行了 2.如果没有建立ssh key的,就从头开始看吧 ——————————————————我是快乐 ...
- LeetCode----Array
Remove Duplicates from Sorted Array 思路:两个指针,头指针在0,尾指针从1开始寻找,找到第一个不等于头指针值的数,覆盖掉头指针后面那个数,然后尾指针往后移. pub ...
- [转]js来弹出窗口的详细说明
1.警告对话框 <script> alert("警告文字") </script> 2.确认对话框 <script> confirm(" ...
- CPU利用率异常的分析思路和方法交流探讨
CPU利用率异常的分析思路和方法交流探讨在生产运行当中,经常会遇到CPU利用率异常或者不符合预期的情况,此时,往往暗示着系统性能问题.那么究竟是核心应用的问题?是监控工具的问题?还是系统.硬件.网络层 ...
- JSTL中fmt标签详解
一:JSTL格式化标签又称为I18N标签库,主要用来编写国际化的WEB应用,使用此功能可以对一个特定的语言请求做出合适的处理. 例如:中国内地用户将显示简体中文,台湾地区则显示繁体中文,使用I18N格 ...
- UICollectionView的使用
感谢下面文章作者的无私奉献 基础用法: http://www.cnblogs.com/ios8/p/iOS-UICollectionView.html http://my.oschina.net/jo ...