1、iOS中一般有哪幾種滥嘴?各自的特點是什么木蹬?
iOS 中一般有GCD、NSOperation/NSOperationQueue若皱、NSThread
GCD:用來實現(xiàn)簡單線程同步届囚、子線程的分派有梆、多讀單寫等
NSOperation:比如ANetworking、由于它自身特別可以通過控制狀態(tài)如添加依賴意系、移除依賴
NSThread:常用來實現(xiàn)一個常駐線程
NSOperation 對象在finished之后怎樣從queue當(dāng)中移除?
NSOperation 對象在finished之后會會在內(nèi)部通過kvo方式 通知它所對應(yīng)
NSOperationQueue中的相應(yīng)queue進行移除
.你都用過哪些鎖饺汹?結(jié)合實際談?wù)勀闶窃趺礃邮褂玫模?/p>
NSLock\ NSRecursiveLock(遞歸鎖)
@synchornized :一般在創(chuàng)建單里對象的時候使用
因為鎖重入原因造成了死鎖蛔添,如何解決呢?使用遞歸鎖NSRecursiveLock
2兜辞、死鎖的原因
隊列引起的循環(huán)等待迎瞧。
GCD 底層開啟的線程是沒有開啟RunLoop的,而performSelector: withObject:afterDelay:提交的方法必須要在RunLoop中
3逸吵、dispatch_barrier_async()
a凶硅、怎樣利用GCD實現(xiàn)多讀單寫?
通過GCD的dispatch_barrier_async來實現(xiàn)
4扫皱、NSOperation
a足绅、用NSOperation實現(xiàn)多線程有哪些優(yōu)勢和特點
1)、可以添加任務(wù)依賴
2)韩脑、任務(wù)執(zhí)行狀態(tài)控制
3)氢妈、可以控制最大并發(fā)量
b、任務(wù)執(zhí)行狀態(tài)
-
我們可以控制NSOperation的哪些執(zhí)行狀態(tài)段多?
.isReady
.isExecuting
.isFinished
.isCancelled
2.系統(tǒng)是怎樣移除一個isFinished = YES的NSOperation首量?
系統(tǒng)是通過KVO方式