iOS中多线程的示例分析
iOS中多线程的示例分析
这篇文章给大家分享的是有关iOS中多线程的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
一、iOS的三种多线程技术
1、NSThread
–优点:NSThread 比其他两个轻量级,使用简单
–缺点:需要自己管理线程的生命周期、线程同步、加锁、睡眠以及唤醒等。线程同步对数据的加锁会有一定的系统开销
2、NSOperation
不需要关心线程管理,数据同步的事情,可以把精力放在自己需要执行的操作上
3、GCD
基于C语言的
二、基本使用
NSThread的基本使用
方式一:
//blockletthread=Thread.init{print("1、----thisisthread\(Thread.current)")}thread.start()
方式二:
//SELletthread2=Thread.init(target:self,selector:#selector(text),object:nil)thread2.start()
@objcfunctext(){print("2、----thisisthread\(Thread.current)")}
方式三:\
self.performSelector(inBackground:#selector(text2),with:nil)
输出
tips:可以给任意一个线程增加延迟看看
print(thread.isCancelled)//是否取消print(thread.isExecuting)//是否在执行print(thread.isFinished)//是否完成print(thread.isMainThread)//是否是主线程
NSOperation的基本使用
方式一:
letqueue=OperationQueue.init()//最大线程数queue.maxConcurrentOperationCount=2queue.addOperation{sleep(1)print("1111")}queue.addOperation{print("2222")}
输出结果如下:
方式二:可设置优先级
letqueue=OperationQueue.init()letop=BlockOperation.init{print("op")}op.queuePriority=.normal//设置优先级queue.addOperation(op)letop2=BlockOperation.init{print("op2")}op2.queuePriority=.normalqueue.addOperation(op2)queue.addOperation{print("op3")}
略作修改
letqueue=OperationQueue.init()letop=BlockOperation.init{sleep(1)print("op")}op.queuePriority=.normal//设置优先级queue.addOperation(op)letop2=BlockOperation.init{sleep(1)print("op2")}op2.queuePriority=.veryHighqueue.addOperation(op2)queue.addOperation{print("op3")}
输出如下:
优先级如下:
GCD的基本使用
方式一:queue.async 异步
letqueue=DispatchQueue.init(label:"com.zjb.concurrent",attributes:.concurrent)foriin0...15{queue.async{sleep(1)print("thisis\(Thread.current)\(i)")}}
方式二:queue.sync 同步
letqueue=DispatchQueue.init(label:"com.zjb.concurrent",attributes:.concurrent)foriin0...15{queue.sync{sleep(1)print("thisis\(Thread.current)\(i)")}}
附加网络上一段代码
foriin1...10{DispatchQueue.global(qos:DispatchQoS.QoSClass.default).async{NSLog("DispatchQoS.QoSClass.default,%d",i)}DispatchQueue.global(qos:DispatchQoS.QoSClass.background).async{NSLog("DispatchQoS.QoSClass.background,%d",i)}DispatchQueue.global(qos:DispatchQoS.QoSClass.unspecified).async{NSLog("DispatchQoS.QoSClass.unspecified,%d",i)}DispatchQueue.global(qos:DispatchQoS.QoSClass.userInitiated).async{NSLog("DispatchQoS.QoSClass.userInitiated,%d",i)}DispatchQueue.global(qos:DispatchQoS.QoSClass.userInteractive).async{NSLog("DispatchQoS.QoSClass.userInteractive,%d",i)}DispatchQueue.global(qos:DispatchQoS.QoSClass.utility).async{NSLog("DispatchQoS.QoSClass.utility,%d",i)}}
优先级userInteractive最高、background最低
感谢各位的阅读!关于“iOS中多线程的示例分析”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!
推荐阅读
-
ios14系统怎么用nfc(ios 14新增的nfc功能怎么用)
ios14新增的nfc功能怎么用?1.打开iPhone后,选择手机的[设置]图标。2.进入后,点击【通用】选项进入。3.单击并选...
-
微信小程序iOS端怎么暂停animated动画
-
ios启动私有链查询区块信息的方法是什么
ios启动私有链查询区块信息的方法是什么本篇内容介绍了“ios启动...
-
正则表达式在ios中怎么用
正则表达式在ios中怎么用这篇文章主要为大家展示了“正则表达式在i...
-
如何进行iOS中的信息泄露漏洞CVE-2020-9964分析
如何进行iOS中的信息泄露漏洞CVE-2020-9964分析今天就...
-
iOS中怎么删除无用的类
本篇文章给大家分享的是有关iOS中怎么删除无用的类,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话...
-
iOS中怎么实现一个序列动画
这篇文章给大家介绍iOS中怎么实现一个序列动画,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。UIViewPr...
-
iOS中怎么利用MVVM实现路由
iOS中怎么利用MVVM实现路由,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更...
-
iOS中怎么判断当前网络环境
本篇文章为大家展示了iOS中怎么判断当前网络环境,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所...
-
iOS中怎么改变UIBarButtonItem的大小
今天就跟大家聊聊有关iOS中怎么改变UIBarButtonItem的大小,可能很多人都不太了解,为了让大家更加了解,小编给大家总结...