目录:
一 NSOperation简介及优势
二 实现多线程的关键步骤
三 NSOperation子类的使用
1 NSInvocationOperation
2 NSBlockOperation
3 自定义子类继承NSOperation,实现内部相应的⽅法 重写main方法
一 NSOperation简介及优势
在GCD 的基础上进行的封装,不用考虑内存, 系统解决 开几个线程 ,使用起来非常方便。
二 实现多线程的关键步骤
把主线程不想干的事情放到 NSOperation 中
把NSOperation对象 放到NSOperationQueue中
三 NSOperation子类的使用
NSOperation是个抽象类,并不具备封装操作的能力,必须使⽤它的子类
1 NSInvocationOperation
// 1 分线程需要做的任务
NSInvocationOperation *operation = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(downloadImage) object:nil];
// 2 将 operation加到 NSOperationQueue
NSOperationQueue *queue = [[NSOperationQueue alloc]init];
[queue addOperation:operation];
2 NSBlockOperation
```
创建并启动一个分线程
/**
*开启分线程的第一种方式
*/
NSBlockOperation *operation = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@"下载图片%@",[NSThread currentThread]);
}];
/**
*
*开启分线程的第二种方式 operation对象调用 addExecutionBlock 开启分线程
*
*/
[operation addExecutionBlock:^{
NSLog(@"---下载音乐---%@",[NSThread currentThread]);
}];
/**
*
*开启分线程的第三种方式 queue对象 直接addOperationWithBlock
*
*/
[queueu addOperationWithBlock:^{
NSLog(@"---下载小说---%@",[NSThread currentThread]);
}];
现在需要 让queue 串行
// 添加依赖 防止互相依赖 造成死锁 3》1 1》3
// 2 3 1
[operationImage addDependency:operationMovei];
[operationMovei addDependency:operationMusic];
// 取消所有的操作事务
[queue cancelAllOperations];
// 暂停 开始 性能优化 定期清理缓存 多线程编程 scrollview tablview
queue.suspended = YES;
queue.suspended = NO;
//盲听 监听
[operationMovei setCompletionBlock:^{
NSLog(@"图片下完了%@",[NSThread currentThread]);
}];