10.7 多線程 NSThread 同步, 異步

多線程的三大類API

NSThread,NSOperationQueue,GCD

多線程本身不是好理解,光是思想就不簡單
timeSlice 每個任務(wù)都有時間片
N個線程間的通信,就是多線程
不可重入函數(shù):在執(zhí)行的時候別的函數(shù)不可以進來
比如a++,第一個線程執(zhí)行到一半,另一個線程又來加一次,就變成加了兩次了,結(jié)果可能就不一樣了
可重入函數(shù)則反之

NSThread
[NSThread detachNewThreadSelector:@selector(demoFunc) toTarget:selfwithObject:nil]
示例:Button不用等下載完就有響應(yīng)
- (IBAction)buttonClicked:(UIButton *)sender {

    //用一個新的線程去執(zhí)行demoFunc4的下載,Button點下去,不用等下載好就有響應(yīng)。
    [NSThread detachNewThreadSelector:@selector(demoFunc4) toTarget:selfwithObject:nil];
   
}

-(void)demoFunc4{

    //下載圖片
    NSData *data = [NSData dataWithContentsOfURL:[NSURLURLWithString:@"http://www.3337973.cc/imgall/mjuxu2djfy2diojtfzrw63i/uploads/allimg/140828/3-140RQ34K1.jpg"]];

    //顯示圖片
    __image.image = [UIImage imageWithData:data];
    
}

主線程只有一個,子線程有多個。幾核的CPU和有多少子線程是沒關(guān)系的。
同步執(zhí)行:等A執(zhí)行完才執(zhí)行B 說的是這個函數(shù)
異步執(zhí)行:不用等A執(zhí)行完就執(zhí)行B。 如果里面有3個方法,只要有一個異步方法,3個都會被傳染成異步方法

為了保證流暢,主線程能少做事情就少做,但是有些是避免不了的,比如說UI基本都是用主線程來執(zhí)行。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容