一、iOS的三種多線程技術(shù)
1、NSThread
–優(yōu)點(diǎn):NSThread 比其他兩個(gè)輕量級(jí),使用簡(jiǎn)單
–缺點(diǎn):需要自己管理線程的生命周期、線程同步、加鎖、睡眠以及喚醒等。線程同步對(duì)數(shù)據(jù)的加鎖會(huì)有一定的系統(tǒng)開(kāi)銷
2、NSOperation
不需要關(guān)心線程管理,數(shù)據(jù)同步的事情,可以把精力放在自己需要執(zhí)行的操作上
3、GCD
基于C語(yǔ)言的
二、基本使用
NSThread的基本使用
方式一:
// block let thread = Thread.init { print("1、----this is thread (Thread.current) ") } thread.start()
方式二:
// SEL let thread2 = Thread.init(target: self, selector: #selector(text), object: nil) thread2.start()
@objc func text(){ print("2、----this is thread (Thread.current) ") }
方式三:
self.performSelector(inBackground: #selector(text2), with: nil)
輸出
tips:可以給任意一個(gè)線程增加延遲看看
print(thread.isCancelled)//是否取消 print(thread.isExecuting)//是否在執(zhí)行 print(thread.isFinished)//是否完成 print(thread.isMainThread)//是否是主線程
NSOperation的基本使用
方式一:
let queue = OperationQueue.init() // 最大線程數(shù) queue.maxConcurrentOperationCount = 2 queue.addOperation { sleep(1) print("1111") } queue.addOperation { print("2222") }
輸出結(jié)果如下:
方式二:可設(shè)置優(yōu)先級(jí)
let queue = OperationQueue.init() let op = BlockOperation.init { print("op") } op.queuePriority = .normal //設(shè)置優(yōu)先級(jí) queue.addOperation(op) let op2 = BlockOperation.init { print("op2") } op2.queuePriority = .normal queue.addOperation(op2) queue.addOperation { print("op3") }
略作修改
let queue = OperationQueue.init() let op = BlockOperation.init { sleep(1) print("op") } op.queuePriority = .normal //設(shè)置優(yōu)先級(jí) queue.addOperation(op) let op2 = BlockOperation.init { sleep(1) print("op2") } op2.queuePriority = .veryHigh queue.addOperation(op2) queue.addOperation { print("op3") }
輸出如下:
優(yōu)先級(jí)如下:
GCD的基本使用
方式一:queue.async 異步
let queue = DispatchQueue.init(label: "com.zjb.concurrent",attributes: .concurrent) for i in 0...15 { queue.async { sleep(1) print("this is (Thread.current) (i)") } }
方式二:queue.sync 同步
let queue = DispatchQueue.init(label: "com.zjb.concurrent",attributes: .concurrent) for i in 0...15 { queue.sync { sleep(1) print("this is (Thread.current) (i)") } }
附加網(wǎng)絡(luò)上一段代碼
for i in 1...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) } }
優(yōu)先級(jí)userInteractive最高、background最低
總結(jié)
到此這篇關(guān)于iOS中多線程入門使用的文章就介紹到這了,更多相關(guān)iOS多線程使用內(nèi)容請(qǐng)搜索服務(wù)器之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持服務(wù)器之家!
原文鏈接:https://blog.csdn.net/weixin_46681371/article/details/121519476