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中多线程的示例分析”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

发布于 2022-03-03 21:28:17
收藏
分享
海报
0 条评论
43
上一篇:Docker中的cgroup怎么用 下一篇:idea2021.3.1如何激活使用
目录

    推荐阅读

    0 条评论

    本站已关闭游客评论,请登录或者注册后再评论吧~

    忘记密码?

    图形验证码