多线程的三大类API
NSThread,NSOperationQueue,GCD
多线程本身不是好理解,光是思想就不简单
timeSlice 每个任务都有时间片
N个线程间的通信,就是多线程
不可重入函数:在执行的时候别的函数不可以进来
比如a++,第一个线程执行到一半,另一个线程又来加一次,就变成加了两次了,结果可能就不一样了
可重入函数则反之
NSThread
[NSThread detachNewThreadSelector:@selector(demoFunc) toTarget:selfwithObject:nil]
示例:Button不用等下载完就有响应
- (IBAction)buttonClicked:(UIButton *)sender {
//用一个新的线程去执行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和有多少子线程是没关系的。
同步执行:等A执行完才执行B 说的是这个函数
异步执行:不用等A执行完就执行B。 如果里面有3个方法,只要有一个异步方法,3个都会被传染成异步方法
为了保证流畅,主线程能少做事情就少做,但是有些是避免不了的,比如说UI基本都是用主线程来执行。