GCD:仅仅支持先进先出原则(FIFO),不支持线程之间的依赖关系,但是GCD更接近底层执行效率更高。
NSOperationQueue: 支持优先级,线程之间的依赖关系。而NSOperation是基于GCD
GCD:
//后台执行的线程
dispatch_async(dispatch_get_global_queue(0, 0), ^{
NSLog(@"这里是后台执行");
});
//主线程执行
dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"这里是主线程执行");
});
//一次性执行的
static dispatch_once_t onceThread;
dispatch_once(&onceThread,^{
NSLog(@"一次性线程");
});
//延时2秒执行
double setTime = 2.0;//设置的时间
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, setTime*NSEC_PER_SEC);//设置延时
dispatch_after(popTime, dispatch_get_main_queue(), ^{
NSLog(@"延时两秒后执行");
});
//GCD让后天两个线程并行执行,然后等待两个线程都结束后再汇总执行结果
dispatch_group_t group = dispatch_group_create();//创建一个组
dispatch_group_async(group, dispatch_get_global_queue(0, 0), ^{
NSLog(@"第一个线程执行的结果");
});
dispatch_group_async(group, dispatch_get_global_queue(0, 0), ^{
NSLog(@"第二个线程执行结果");
});
dispatch_group_notify(group, dispatch_get_global_queue(0, 0), ^{
NSLog(@"这是汇总过后的结果");
});
NSOperation:
//创建队列
NSOperationQueue *queue = [[NSOperationQueue alloc]init];
//获得主队列
NSOperationQueue *mainQueue = [NSOperationQueue mainQueue];
//创建下载小说的操作
NSBlockOperation *downLoadOperation = [NSBlockOperation blockOperationWithBlock:^{
//
NSLog(@"下载小说%@",[NSThread currentThread]);
}];
//创建下载小说的操作
NSBlockOperation *openLoadOperation = [NSBlockOperation blockOperationWithBlock:^{
//
NSLog(@"解压小说%@",[NSThread currentThread]);
}];
//创建下载小说的操作
NSBlockOperation *uiLoadOperation = [NSBlockOperation blockOperationWithBlock:^{
//
NSLog(@"跟新UI%@",[NSThread currentThread]);
}];
//设置依赖关系
[openLoadOperation addDependency:downLoadOperation];
//添加下载和解压操作
[queue addOperations:@[downLoadOperation,openLoadOperation] waitUntilFinished:YES];
//主队列跟新ui
[mainQueue addOperation:uiLoadOperation];
可能是用的比较少的原因。所以理解的也不是很透彻。