对于一些耗时操作、大数据请求、图片下载等,在主线程执行,就会阻塞界面,所以就引入了线程概念。线程分为同步线程和异步线程。这里重点讲异步线程,开启异步线程:NSThread、NSOperationQueue、GCD。
1.GCD的基本用法:
//1.使用GCD创建线程
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0), ^{
//异步执行操作
dispatch_async(dispatch_get_main_queue(), ^{
//返回主线程,显示UI
});
});
//2.GCD其他用法
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t) (2.0*NSEC_PER_SEC)),dispatch_get_main_queue(), ^{
//一段时间后执行操作
});
//3.对任务只执行一次
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
});
2.NSThread的基本用法:
//1.线程停止一秒
[NSThread sleepForTimeInterval:1.0];
//2.显示当前线程
[NSThread currentThread];
3.NSOperationQueue的基本用法:
//多个线程,直线完某线程,在去执行另外的线程,使用线程依赖
NSOperationQueue *opq = [[NSOperationQueue alloc]init];
NSOperation *op1 = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@"op1");
}];
NSOperation *op2 = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@"op2");
}];
NSOperation *op3 = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@"op3");
}];
//线程依赖,等执行完op1 op3,才会执行op2
[op2 addDependency:op1];
[op2 addDependency:op3];
//加到线程队列里面
[opq addOperation:op1];
[opq addOperation:op2];
[opq addOperation:op3];