1,pthread_create??
(unix自帶的線程創(chuàng)建, 不多說,都知道, 比較少用)
2,nsthread
優(yōu)點(diǎn):NSThread 比其他兩個(gè)輕量級(jí)。
缺點(diǎn):需要自己管理線程的生命周期算谈,線程同步问芬,線程同步時(shí)對(duì)數(shù)據(jù)的加鎖會(huì)有一定的系統(tǒng)開銷
兩種方式創(chuàng)建:
- (id)initWithTarget:(id)target selector:(SEL)selector object:(id)argument
[thread start]; //要手動(dòng)去start開啟線程
+ (void)detachNewThreadSelector:(SEL)aSelector toTarget:(id)aTarget withObject:(id)anArgument //會(huì)自動(dòng)開啟線程
3,performSelectorInBackground:withObject: 來創(chuàng)建一個(gè)線程
[self performSelectorInBackground:@selector(run:) withObject:@"test"]; //在后臺(tái)運(yùn)行某一個(gè)方法
其效果與 NSThread 的 detachNewThreadSelector:toTarget:withObject: 是一樣的迅栅。
4,nsoperation? (NSInvocationOperation 和 NSBlockOperation)
NSOperation是個(gè)抽象類,使用它必須用它的子類,可以實(shí)現(xiàn)它或者使用它定義好的兩個(gè)子類:NSInvocationOperation 和 NSBlockOperation慈省。創(chuàng)建NSOperation子類的對(duì)象,把對(duì)象添加到NSOperationQueue隊(duì)列里執(zhí)行眠菇,我們會(huì)把我們的執(zhí)行操作放在NSOperation中main函數(shù)中边败。
nsoperation的子類要支持并發(fā)執(zhí)行的話并,需要重載如下4個(gè)方法(默認(rèn)不是并發(fā)的)
//執(zhí)行任務(wù)主函數(shù),線程運(yùn)行的入口函數(shù)
-(void)start
//是否允許并發(fā)捎废,返回YES笑窜,允許并發(fā),返回NO不允許登疗。默認(rèn)返回NO
-(BOOL)isConcurrent
- (BOOL)isExecuting
//是否已經(jīng)完成排截,這個(gè)必須要重載,不然放在放在NSOperationQueue里的NSOpertaion不能正常釋放辐益。
(BOOL)isFinished
5,GCD
dispatch queue分為下面三種:1,Serial
又稱為private dispatch queues断傲,同時(shí)只執(zhí)行一個(gè)任務(wù)。Serial queue通常用于同步訪問特定的資源或數(shù)據(jù)智政。當(dāng)你創(chuàng)建多個(gè)Serial queue時(shí)认罩,雖然它們各自是同步執(zhí)行的,但Serial queue與Serial queue之間是并發(fā)執(zhí)行的续捂。
2,Concurrent
又稱為global dispatch queue垦垂,可以并發(fā)地執(zhí)行多個(gè)任務(wù),但是執(zhí)行完成的順序是隨機(jī)的疾忍。
3,Main dispatch queue
它是全局可用的serial queue乔外,它是在應(yīng)用程序主線程上執(zhí)行任務(wù)的。