線程是用來執(zhí)行任務(wù)的光涂,線程徹底執(zhí)行完任務(wù)A才能去執(zhí)行任務(wù)B日杈。為了同時執(zhí)行兩個任務(wù)遣铝,產(chǎn)生了多線程。 線程執(zhí)行完畢就被銷毀
1莉擒、進程就是在操作系統(tǒng)中運行的程序酿炸,專業(yè)點說,進程是應(yīng)用程序的執(zhí)行實例
2涨冀、進程不能執(zhí)行任務(wù)
3填硕、進程在運行時創(chuàng)建的資源隨著進程的終止而死亡
線程執(zhí)行完畢就會被銷毀。
子線程:由主線程來創(chuàng)建,用來幫助主線程執(zhí)行程序的后臺處理任務(wù)。如果子線程A中又創(chuàng)建一個子線程B扁眯,在創(chuàng)建之后壮莹,這兩者就是相互獨立的,多個子線程之間效果上可以同時執(zhí)行姻檀。
一個進程中可以有多個線程命满,并且所有線程都在該進程的虛擬地址空間中,可以使用進程的全局變量和系統(tǒng)資源绣版。
多線程(NSThread)
初始化有倆種方式
NSThread *thread=[[NSThread alloc]initWithTarget:self selector:@selector(子線程調(diào)用的方法) object:@"可以傳進子線程方法的參數(shù)id類型"];?
[NSThread detachNewThreadSelector:@selector(thraed:) toTarget:self withObject:@"thread"];第二種初始化
注釋:第一種初始化方式需要手動開啟任務(wù) 第二種不需要
[thraed start]周荐;
子線程調(diào)用的其他經(jīng)常常用的方法或?qū)傩裕?/p>
[NSThread currentThread]可以得到當前的線程
eg;"{number = 22, name = main}", number系統(tǒng)分配的數(shù)字 name是線程的名字 其中主線程number是1 name=main?
BOOL isMainThread 判斷是否為主線程
BOOL executing 判斷是否正在執(zhí)行
BOOL finished 判斷是否完成
BOOL cancelled判斷是否取消
- (void)cancel ?取消
- (void)start 開始
- (void)main ?設(shè)main線程
[NSThread exit];//退出當前線程 (線程先取消狀態(tài)下才能推出)
+ (BOOL)setThreadPriority:(double)p;設(shè)置優(yōu)先級
+ (void)sleepForTimeInterval:(NSTimeInterval)ti;設(shè)置線程休眠時間
- (void)performSelectorOnMainThread:(SEL)aSelector withObject:(nullable id)arg waitUntilDone:(BOOL)wait;//子線程執(zhí)行完畢跳的主線程 切換線程