多線程的三大類API
NSThread公罕,NSOperationQueue,GCD
多線程本身不是好理解容贝,光是思想就不簡單
timeSlice 每個任務都有時間片
N個線程間的通信自脯,就是多線程
不可重入函數(shù):在執(zhí)行的時候別的函數(shù)不可以進來
比如a++,第一個線程執(zhí)行到一半斤富,另一個線程又來加一次膏潮,就變成加了兩次了,結(jié)果可能就不一樣了
可重入函數(shù)則反之
NSThread
[NSThread detachNewThreadSelector:@selector(demoFunc) toTarget:selfwithObject:nil]
示例:Button不用等下載完就有響應
- (IBAction)buttonClicked:(UIButton *)sender {
//用一個新的線程去執(zhí)行demoFunc4的下載满力,Button點下去焕参,不用等下載好就有響應。
[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í)行看峻。