iOS中多線程的入門使用教程(Swift)
一、iOS的三種多線程技術(shù)
1、NSThread
–優(yōu)點:NSThread 比其他兩個輕量級,使用簡單
–缺點:需要自己管理線程的生命周期、線程同步、加鎖、睡眠以及喚醒等。線程同步對數(shù)據(jù)的加鎖會有一定的系統(tǒng)開銷
2、NSOperation
不需要關(guān)心線程管理,數(shù)據(jù)同步的事情,可以把精力放在自己需要執(zhí)行的操作上
3、GCD
基于C語言的
二、基本使用
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:可以給任意一個線程增加延遲看看
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)先級
let queue = OperationQueue.init()
let op = BlockOperation.init {
print("op")
}
op.queuePriority = .normal //設(shè)置優(yōu)先級
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)先級
queue.addOperation(op)
let op2 = BlockOperation.init {
sleep(1)
print("op2")
}
op2.queuePriority = .veryHigh
queue.addOperation(op2)
queue.addOperation {
print("op3")
}
輸出如下:

優(yōu)先級如下:

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)先級userInteractive最高、background最低
總結(jié)
到此這篇關(guān)于iOS中多線程入門使用的文章就介紹到這了,更多相關(guān)iOS多線程使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
iOS UIScrollView滾動視圖/無限循環(huán)滾動/自動滾動的實例代碼
這篇文章主要介紹了iOS UIScrollView滾動視圖/無限循環(huán)滾動/自動滾動,需要的朋友可以參考下2017-02-02
IOS簡單實現(xiàn)瀑布流UICollectionView
這篇文章主要為大家介紹了IOS簡單實現(xiàn)瀑布流UICollectionView的相關(guān)資料,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-01-01
iOS實現(xiàn)列表與網(wǎng)格兩種視圖的相互切換
相信大家應(yīng)該也都發(fā)現(xiàn)了,在現(xiàn)在很多的電商app中,都會有列表視圖和網(wǎng)格兩種視圖的相互切換。例如京東和淘寶。這樣更利于提高用戶的體驗度,所以這篇文章小編就是大家分享下利用iOS實現(xiàn)列表與網(wǎng)格兩種視圖相互切換的方法,文中介紹的很詳細,感興趣的下面來一起看看吧。2016-10-10
iOS實現(xiàn)獲取系統(tǒng)iTunes音樂的方法示例
這篇文章主要給大家介紹了關(guān)于iOS如何實現(xiàn)獲取系統(tǒng)iTunes音樂的相關(guān)資料,文中通過示例代碼給大家詳細介紹了實現(xiàn)的方法,并給大家介紹了MPMediaPickerController的相關(guān)知識,對大家的學(xué)習(xí)或者工作具有一定的幫助,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2017-11-11
淺談iOS中幾個常用協(xié)議 NSCopying/NSMutableCopying
下面小編就為大家分享一篇淺談iOS中幾個常用協(xié)議 NSCopying/NSMutableCopying,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2017-12-12
Swift 去除 TableView 多余的空Cell中的橫線的方法
這篇文章主要介紹了Swift 去除 TableView 多余的空Cell中的橫線的方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-02-02

