iOS有四種多線程編程的技術(shù)猫态,分別是:NSThread该园,Cocoa NSOperation伐弹,GCD(全稱:Grand Central Dispatch),pthread拉馋。
四種方式的優(yōu)缺點介紹:
1)NSThread
優(yōu)點:NSThread 比其他兩個輕量級。
缺點:需要自己管理線程的生命周期惨好,線程同步煌茴。
線程同步對數(shù)據(jù)的加鎖會有一定的系統(tǒng)開銷。
2)Cocoa NSOperation
優(yōu)點:不需要關(guān)心線程管理日川, 數(shù)據(jù)同步的事情蔓腐,可以把精力放在自己需要執(zhí)行的操作上。
Cocoa operation相關(guān)的類是NSOperation, NSOperationQueue.NSOperation是個抽象類,使用它必須用它的子類龄句,可以實現(xiàn)它或者使用它定義好的兩個子類: NSInvocationOperation和NSBlockOperation.創(chuàng)建NSOperation子類的對象回论,把對象添加到NSOperationQueue隊列里執(zhí)行。
3)GCD
(全優(yōu)點)Grand Central dispatch(GCD)是Apple開發(fā)的一個多核編程的解決方案分歇。
在iOS4.0開始之后才能使用傀蓉。
GCD是一個替代NSThread, NSOperationQueue,NSInvocationOperation等技術(shù)的很高效強大的技術(shù)。
4) pthread
是一套通用的多線程API职抡,適用于Linux\Windows\Unix,跨平臺葬燎,可移植,使用C語言,生命周期需要程序員管理谱净,IOS開發(fā)中使用很少窑邦。
GCD線程死鎖
GCD 確實好用 ,很強大壕探,相比NSOpretion 無法提供 取消任務(wù)的功能冈钦。
如此強大的工具用不好可能會出現(xiàn)線程死鎖。
GCD Queue 分為三種:
1李请,The main queue :主隊列瞧筛,主線程就是在個隊列中。
2捻艳,Global queues : 全局并發(fā)隊列驾窟。
3庆猫,用戶隊列:是用函數(shù) dispatch_queue_create創(chuàng)建的自定義隊列
dispatch_sync 和 dispatch_async 區(qū)別:
dispatch_async(queue,block) async 異步隊列认轨,dispatch_async函數(shù)會立即返回, block會在后臺異步執(zhí)行。
dispatch_sync(queue,block) sync 同步隊列月培,dispatch_sync函數(shù)不會立即返回嘁字,及阻塞當前線程,等待 block同步執(zhí)行完成。
五個案例讓你明白GCD死鎖
http://ios.jobbole.com/82622/