2016 - 1 -19 初探NSOperation
一:简介
1.NSOperation的作用:
配合NSOperation与NSOperationQueue也可以实现多线程。
2.NSOperation与NSOperationQueue实现多线程的步骤:
2.1现将需要执行的操作封装到NSOperation对象中
2.2然后将NSOperation添加到NSOperationQueue中
2.3系统会自动将NSOPerationQueue中的NSOPeration取出来
二:NSOPeration的子类
1.NSOPeration是个抽象类,并不具备封装操作的能力,必须使用他的子类。
2.使用NSOPeration子类的方式有三种:
2.1NSInvocationOpertation
2.2NSBlockOperating
2.3自定义子类继承NSOperation,实现内部相应方法
三:NSOPerationQueue
1.NSOperationQueue 的类型:
1.1主队列,通过 [NSOperationQueue mainQueue];可以获得。
1.2其他队列:串行队列,并发队列。 通过 [[NSOperationQueue alloc ] init];可以获得。
2.使用:
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
NSOperationQueue *opQ = [[NSOperationQueue alloc ] init];
NSInvocationOperation *op1 = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(run1) object:nil];
NSInvocationOperation *op2 = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(run2) object:nil];
[opQ addOperation:op1];// 会在内部调用[op1 start]这个方法并放入子线程内
[opQ addOperation:op2];
}
- (void)run1{
NSLog(@"1 ------ %@",[NSThread currentThread]);
}
- (void)run2{
NSLog(@"2 ------ %@",[NSThread currentThread]);
}
3.自定义Operation
3.1使用场景:当操作比较复杂时,就可以自定义一个NSOperation,然后将复杂的操作放在自定义operation里。
3.2实现:
3.2.1需要在自定义Operation中重写main函数:
如:
- (void)main
{
NSLog(@"%@-----------------自定义Operation",[NSThread currentThread]);
}
3.2.2创建自定义Operation 添加到队列里去:
ZZNSOpertation *op3 = [[ZZNSOpertation alloc] init];
[opQ addOperation:op3];
3.2.3打印结果:
2016-01-19 17:43:39.941 NSPerationQueue[16438:1477860] <NSThread: 0x7ff00a60d600>{number = 4, name = (null)}-----------------自定义Operation
2016 - 1 -19 初探NSOperation的更多相关文章
- 【读书笔记】2016.11.19 北航 《GDG 谷歌开发者大会》整理
2016.11.19 周六,我们在 北航参加了<GDG 谷歌开发者大会>,在web专场,聆听了谷歌公司的与会专家的技术分享. 中午免费的午餐,下午精美的下午茶,还有精湛的技术,都是我们队谷 ...
- U3D笔记11:47 2016/11/30-15:15 2016/12/19
11:47 2016/11/30Before you can load a level you have to add it to the list of levels used in the gam ...
- 学习图像算法阶段性总结 (附一键修图Demo) 2016.04.19更新demo
今天特别感慨,自己从决定研究图像处理,势必要做出一键修图算法. 经历了,三个多月的书籍积累,三个多月的算法调整以及优化. 人是一种奇怪的动物,当你做不到的时候,你以为做到了,自己会感觉很爽,很有成就感 ...
- 【我的书】Unity Shader的书 — 目录(2016.5.19最后一次更新)
写在前面 感谢所有点进来看的朋友.没错,我目前打算写一本关于Unity Shader的书. 出书的目的有下面几个: 总结我接触Unity Shader以来的历程,给其他人一个借鉴.我非常明白学Shad ...
- 2016.1.19 DEV Express控件GirdControl使用
103.GridControl中添加Button RunDesigner,添加一列,设置对应字段FiledName,ColumnEdit选择ButtonEdit,此时默认风格像下拉框,需调整属性: 在 ...
- Murano Weekly Meeting 2016.07.19
Meeting time: 2016.July.19 1:00~2:00 Chairperson: Kirill Zaitsev, from Mirantis Meeting summary: 1. ...
- 2016.8.19上午初中部NOIP普及组比赛总结
2016.8.19上午初中部NOIP普及组比赛总结 链接:https://jzoj.net/junior/#contest/home/1338 这次总结发得有点晚啊!我在这里解释一下, 因为浏览器的问 ...
- 2016 - 2 - 19 ARC内存管理知识总结(一,arc基本概念及alloc等方法的实现)
一. ARC的基本概念 1. 在objc中采用automatic reference counting 机制, 让编译器来进行内存管理.在降低程序崩溃,内存管理泄漏等风险的同时,很大程度减少了程序员的 ...
- 从零开始HTML(一 2016/9/19)
就是准备跟着W3C上的教程过一遍HTML啦,边看边记录更便于理解记忆吧~ 1.属性 HTML 标签可以拥有属性.属性提供了有关 HTML 元素的更多的信息.属性总是以名称/值对的形式出现,比如:nam ...
随机推荐
- NOIP 2014 普及组 T3 螺旋矩阵
[题意] 已知:n,r,c(n<=30000) 条件:给定n行n列的螺旋矩阵(从矩阵的左上角(1,1)出发,初始时向右移动:如果前方是未曾经过的格子, 则继续前进,否则右转:重复上述操作直至经过 ...
- C#基础:泛型委托
泛型委托是委托的一种特殊形式,感觉看上去比较怪异,其实在使用的时候跟委托差不多,不过泛型委托更具有类型通用性. 就拿C#里最常见的委托EventHandler打比方.在.NET 2.0以前,也就是泛型 ...
- 如何设置一个严格30分钟过期的Session
今天在我的微博(Laruence)上发出一个问题: 我在面试的时候, 经常会问一个问题: “如何设置一个30分钟过期的Session?”, 大家不要觉得看似简单, 这里面包含的知识挺多, 特别适合考察 ...
- collectionView初始化
collectionView初始化时一定要加layout.不然会报错: UICollectionView must be initialized with a non-nil layout param ...
- Ansible :一个配置管理和IT自动化工具
编译文章:LCTT https://linux.cn/article-4215-1.html 译者: felixonmars 文章地址:https://linux.cn/article-4215-1 ...
- iOS开发零碎笔记
Mac常用操作 全屏截图:同时按住键盘左下方的command和shift ,然后点击键盘上方的数字键3,便可对整个屏幕截图,截图会自动保存在桌面:任意部分截图:同时按住键盘左下方的ommand和s ...
- 用HTML5实现手机摇一摇的功能(转)
在百度开发者大会上我介绍过HTML5另外一个重要特性就是DeviceOrientation,它将底层的方向传感器和运动传感器进行了高级封装,提供了DOM事件的支持.这个特性包括两种事件: 1.devi ...
- syslog简介——系统日志写入API
一.简介 syslog是Linux系统默认的日志守护进程.默认的主配置文件和辅助配置文件分别是/etc/syslog.conf和/etc/sysconfig/syslog文件.通常,syslog 接受 ...
- 你所知道的Java单例模式并不是单例模式
当我们搜索单例模式的时候,能看到很多例子,什么懒汉式.饿汉式,大概如下: public class Singleton { private static Singleton instance=null ...
- 使用FIDDER 抓包构建请求
FIDDER 是一个抓包利器,可以抓去浏览器的http请求. 工作原理是: FIDDER 作为代理. 1.在启动fidder时他自动启动服务监听8888端口. 2.启动FIDDER它会自动修改 ...