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中多线程的示例分析”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!
推荐阅读
-
Xcode 15 新特性解析:SwiftUI 预览优化与 iOS 真机调试流程简化
-
Xcode 编译耗时过长?5 个技巧加速 iOS 项目构建与打包流程
-
能在ios上虚拟windows吗
近期有些网友想要了解能在ios上虚拟windows吗的相关情况,小编通过整理给您分享一下。iOS设备运行Windows的可能性许多...
-
ios14系统怎么用nfc(ios 14新增的nfc功能怎么用)
ios14新增的nfc功能怎么用?1.打开iPhone后,选择手机的[设置]图标。2.进入后,点击【通用】选项进入。3.单击并选...
-
微信小程序iOS端怎么暂停animated动画
微信小程序iOS端怎么暂停animated动画这篇“微信小程序iO...
-
ios启动私有链查询区块信息的方法是什么
ios启动私有链查询区块信息的方法是什么本篇内容介绍了“ios启动...
-
正则表达式在ios中怎么用
正则表达式在ios中怎么用这篇文章主要为大家展示了“正则表达式在i...
-
如何进行iOS中的信息泄露漏洞CVE-2020-9964分析
如何进行iOS中的信息泄露漏洞CVE-2020-9964分析今天就...
-
iOS中怎么删除无用的类
本篇文章给大家分享的是有关iOS中怎么删除无用的类,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话...
-
iOS中怎么实现一个序列动画
这篇文章给大家介绍iOS中怎么实现一个序列动画,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。UIViewPr...