美文网首页
iOS开发多线程篇--NSOperation与Queue

iOS开发多线程篇--NSOperation与Queue

作者: peal | 来源:发表于2016-03-14 20:23 被阅读417次

目录:

一 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]);
    
}];

相关文章

网友评论

      本文标题:iOS开发多线程篇--NSOperation与Queue

      本文链接:https://www.haomeiwen.com/subject/ojbflttx.html