NSOperation

优点:不需要关心线程管理,数据同步的事情,可以把精力放在自己需要执行的操作上。

NSOperation实例封装了需要执行的操作和执行操作所需的数据,并且能够以并发或非并发的方式执行这个操作。

NSOperation本身是抽象基类,因此必须使用它的子类,使用NSOperation子类的方式有2种:一种是用定义好的两个子类:NSInvocationOperation 和 NSBlockOperation,另一种是自定义子类继承NSOperation,实现内部相应的方法
  1. NSOperation的作用:配合使用NSOperation和NSOperationQueue也能实现多线程编程取消操作
  2. NSOperation和NSOperationQueue实现多线程的具体步骤:
          A.需要执行的操作封装到一个NSOperation对象中
          B.将NSOperation对象添加到NSOperationQueue中
         C.系统会⾃动将NSOperationQueue中的NSOperation取出来
         D.将取出的NSOperation封装的操作放到⼀条新线程中执⾏
    //1.NSInvocationOperation创建操作对象封装要执行的任务

NSInvocationOperation *operation=[[NSInvocationOperationalloc]initWithTarget:selfselector:@selector(run1) object:nil];

//执行操作

[operation start];

//注意:操作对象默认在主线程中执行,只有添加到队列中才会开启新的线程。即默认情况下,如果操作没有放到队列queue中,都是同步执行。只有将NSOperation放到一个NSOperationQueue中,才会异步执行操作

NSInvocationOperation *operation1 = [[NSInvocationOperationalloc] initWithTarget:selfselector:@selector(run1) object:nil];

[operation1 start];

//2.NSBlockOperation

NSBlockOperation *block=[NSBlockOperationblockOperationWithBlock:^{

NSLog(@"block操作:%@",[NSThreadcurrentThread]);

}];

//在NSBlockOperation对象中添加一个操作,如果NSBlockOperation对象至少包含了多个操作,有一个是主线程中执行,其他均在子线程中

[block addExecutionBlock:^{

NSLog(@"block操作1:%@",[NSThreadcurrentThread ]);

}];

[block addExecutionBlock:^{

NSLog(@"block操作2:%@",[NSThreadcurrentThread ]);

}];

[block addExecutionBlock:^{

NSLog(@"block操作3:%@",[NSThreadcurrentThread ]);

}];

[block start];

//注意:添加操作要放在start之前

//创建队列:将操作放入队列中(主队列除外)默认的在子线程中执行,且不用手动start

NSOperationQueue *queue=[[NSOperationQueuealloc]init]; //NSOperationQueue的作⽤:NSOperation可以调⽤start⽅法来执⾏任务,但默认是同步执行的。如果将NSOperation添加到NSOperationQueue(操作队列)中,系统会自动异步执行NSOperation中的操作。添加操作到NSOperationQueue中,自动执行操作,自动开启线程

NSInvocationOperation *qoperation=[[NSInvocationOperationalloc]initWithTarget:selfselector:@selector(run2) object:nil  ];

[queue addOperation:qoperation];

[queue addOperationWithBlock:^{

NSLog(@"block操作队列:%@",[NSThreadcurrentThread ]);

}];

}

-(void)run1{

NSLog(@"22222%@",[NSThreadcurrentThread]);

}

-(void)run2{

NSLog(@"队列中执行:%@",[NSThreadcurrentThread]);

}

转载于:https://www.cnblogs.com/wyhwyh2114/p/5033691.html

多线程之 NSOperation相关推荐

  1. iOS多线程全套:线程生命周期,多线程的四种解决方案,线程安全问题,GCD的使用,NSOperation的使用(下)

    2017-07-08 remember17 Cocoa开发者社区 7NSOperation的理解与使用 No.1:NSOperation简介 NSOperation是基于GCD之上的更高一层封装,NS ...

  2. iOS多线程:『NSOperation、NSOperationQueue』详尽总结

    2019独角兽企业重金招聘Python工程师标准>>> iOS多线程:『NSOperation.NSOperationQueue』详尽总结 转载: 原地址https://www.ji ...

  3. IOS学习之多线程(9)--NSOperation简单介绍

    转载自 http://www.cnblogs.com/wendingding/p/3809042.html 一.NSOperation简介 1.简单说明 NSOperation的作:配合使用NSOpe ...

  4. ios多线程 -- NSOperation 简介

    NSOperation的作⽤:配合使用NSOperation和NSOperationQueue也能实现多线程编程 NSOperation和NSOperationQueue实现多线程的具体步骤: 1)先 ...

  5. 浅谈多线程——NSOperation

    iOS中多线程相关方法--NSOperation及其相关类: NSOperation NSBlockOperation NSInvocationOperation NSOperationQueue 1 ...

  6. MaciOS之多线程(转)

    转自 https://github.com/kejinlu/objc-doc/blob/master/%E5%A4%9A%E7%BA%BF%E7%A8%8B.md#macios%E4%B9%8B%E5 ...

  7. iOS多线程详解:实践篇

    iOS多线程实践中,常用的就是子线程执行耗时操作,然后回到主线程刷新UI.在iOS中每个进程启动后都会建立一个主线程(UI线程),这个线程是其他线程的父线程.由于在iOS中除了主线程,其他子线程是独立 ...

  8. 多线程实现的几种方式

    多线程实现一共有四种方式,如下图: - pthread的使用 - 定义pthread typedef __darwin_pthread_t pthread_t; - 创建pthread int pth ...

  9. 多线程学习笔记3-NSOperationQueue

    NSOperationQueue NSOperation的作用 配合使用NSOperation和NSOperationQueue也能实现多线程编程 NSOperation和NSOperationQue ...

  10. 学习多线程 - iOS

    实现多线程的方案一共有四种:pthread,NSThread,GCD,NSOperation 一.线程的状态与生命周期 新建:实例化线程对象 就绪:向线程对象发送start消息,线程对象就被加入到可调 ...

最新文章

  1. 学生服务器选用什么系统,学生云服务器系统选择
  2. IE6下绝对定位的DIV被相对定位的DIV挡住的问题
  3. Liunx 查看硬件信息
  4. 在非UI线程中显示Toast
  5. wota dance
  6. 10个开源工业检测数据集汇总
  7. 后端数据成功返回 页面不渲染_如何统计页面访问量,看这一篇就够了
  8. windows 安装leopard方法
  9. mysql巡检常用命令_总结Linux下系统巡检常用命令
  10. 无边框对话框拖动改变大小的实现总结
  11. 微信公众号自定义菜单
  12. matlab命令行运行,命令行运行matlab
  13. html中加入标题居中,在html标题标记中居中的div元素
  14. android客服功能实现,基于环信实现android客户端客服聊天功能
  15. 操作系统实验一到实验九合集(哈工大李治军)
  16. 微信公众号主体注销了,如何办理账号迁移?
  17. Android 显示后台返回富文本rgb色值适配问题
  18. SwiftUI的多列列表
  19. 节假日api--java调用与获取数据
  20. Metasploit用法大全

热门文章

  1. 四大网络抓包神器,总有一款适合你~
  2. 百度统计挂了,分布式数据库异常引起,数据显示为空!
  3. 华为云TechWave全球技术峰会,看云基础设施全新打开方式
  4. 接不住了,能撒手吗?
  5. Linux进阶之环境变量文件/etc/profile、/etc/bashrc、/etc/environment
  6. 事件冒泡、事件捕获、事件委托
  7. bzoj3196 二逼平衡树——线段树套平衡树
  8. java基础27 单例集合Collection及其常用方法
  9. eclipse 代码问题总结
  10. Moss 2007 升级到 Moss2010 成功但界面仍然保持07?