IOS NSOperation&NSOperationQueue
- //
- // ViewController.m
- // CX-NSOperationQueue
- //
- // Created by ma c on 16/3/15.
- // Copyright © 2016年 xubaoaichiyu. All rights reserved.
- //
- /*
- GCD -- (iOS4.0)多线程解决方案
- 将任务(block)添加到队列(串行,并行(全局队列)),指定执行任务的方法。(同步,异步)
- 拿到dispatch_get_main_queue,线程之间的通信
- NSOperation -- (iOS2.0) (后经苹果改造)
- 将操作添加到队列里
- [NSOperationQueue mainQueue] 获取主队列,将任务添加到主队列,就会在主线程中执行
- NSOperation可以设置最大并发数(用GCD处理,比较麻烦)
- 可以暂停可以继续,也就是挂起操作
- 取消所有的任务
- 设置依赖关系
- */
- #import "ViewController.h"
- @interface ViewController ()
- //NSOperation 队列
- @property (nonatomic, strong) NSOperationQueue * queue;
- @end
- @implementation ViewController
- -(NSOperationQueue *)queue{
- if (!_queue) {
- _queue = [[NSOperationQueue alloc]init];
- }
- return _queue;
- }
- - (void)viewDidLoad {
- [super viewDidLoad];
- //线程间通信
- // [self contact];
- //最大并发数 注意观察测试时间
- [self maxCount];
- //常用操作
- /*
- 取消操作:- (void)cancelAllOperations;
- 挂起操作:@property (getter=isSuspended) BOOL suspended;
- 依赖关系:- (void)addDependency:(NSOperation *)op;
- 取消依赖:- (void)removeDependency:(NSOperation *)op;
- */
- }
- -(void)maxCount{
- self.queue.maxConcurrentOperationCount = ;
- for (NSInteger i = ; i < ; i ++) {
- NSInvocationOperation * operation = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(test) object:nil];
- [self.queue addOperation:operation];
- }
- }
- -(void)test{
- [NSThread sleepForTimeInterval:];
- NSLog(@"%@",[NSThread currentThread]);
- }
- //线程间通信
- -(void) contact{
- [self.queue addOperationWithBlock:^{
- NSLog(@"%@",[NSThread currentThread]);
- NSLog(@"One");
- [[NSOperationQueue mainQueue] addOperationWithBlock:^{
- NSLog(@"%@",[NSThread currentThread]);
- NSLog(@"Two");
- }];
- }];
- }
- - (void)test3 {
- //NSOperation是基于GCD的,把GCD的block封装成opertion,NSOperationQueue是全局队列封装
- //将NSOperation添加到一个NSOperationQueue(操作队列)中去执行,而且是异步执行的。
- //创建一个操作队列
- NSOperationQueue * queue = [[NSOperationQueue alloc] init];
- NSInvocationOperation * op = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(test) object:nil];
- NSBlockOperation * op2 = [NSBlockOperation blockOperationWithBlock:^{
- NSLog(@"op2 - %@",[NSThread currentThread]);
- }];
- //添加NSOperation到NSOperationQueue中
- //NSOperation添加到queue之后,通常短时间内就会得到运行。
- // [queue addOperation:op];
- // [queue addOperation:op2];
- // waitUntilFinished yes 操作完成后执行下面的代码 no 先执行下面的代码
- //添加一个block形式的operation
- [queue addOperationWithBlock:^{
- NSLog(@"op3 - %@",[NSThread currentThread]);
- }];
- [queue addOperations:@[op,op2] waitUntilFinished:NO];
- // NSLog(@"完成");
- }
- - (void)test2 {
- // 能够并发地执行一个或多个block对象,所有相关的block都执行完之后,操作才算完成
- NSBlockOperation * op = [NSBlockOperation blockOperationWithBlock:^{
- NSLog(@"%@",[NSThread currentThread]);
- NSLog(@"第一个操作");
- }];
- // 通过addExecutionBlock方法添加block操作,开启多个线程
- [op addExecutionBlock:^{
- NSLog(@"%@",[NSThread currentThread]);
- NSLog(@"第二个操作");
- }];
- [op addExecutionBlock:^{
- NSLog(@"%@",[NSThread currentThread]);
- NSLog(@"第三个操作");
- }];
- [op start];
- }
- - (void)test1 {
- // 基于一个对象和selector来创建操作。如果你已经有现有的方法来执行需要的任务,就可以使用这个类
- NSInvocationOperation * op = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(test) object:nil];
- // 如果我们想在一个NSOperation执行完毕后做一些事情,就调用NSOperation的setCompletionBlock方法来设置想做的事情
- [op setCompletionBlock:^{
- NSLog(@"完成");
- }];
- // 开始执行任务(同步执行)
- // 一个NSOperation对象可以通过调用start方法来执行任务,默认是同步执行的。
- [op start];
- }
- @end
*有关进程与线程我会进行总结*
*由于昨天网络出现问题,昨晚把代码写出来了,但是没有上传
IOS NSOperation&NSOperationQueue的更多相关文章
- iOS中的多线程NSThread/GCD/NSOperation & NSOperationQueue
iOS多线程有四套多线程方案: Pthreads NSThread GCD NSOperation & NSOperationQueue 接下来我来一个一个介绍他们 Pthreads 在类Un ...
- IOS多线程(NSOperation,NSOperationQueue)
含义:NSOperation,NSOperationQueue是什么. The NSOperation class is an abstract class you use to encapsulat ...
- iOS NSOperation
iOS NSOperation 一.简介 除了,NSThread和GCD实现多线程,配合使用NSOperation和NSOperationQueue也能实现多线程编程 NSOperation和NSOp ...
- iOS开发之NSOperation & NSOperationQueue
1.简介 (1) NSOperationQueue(操作队列)是由GCD提供的队列模型的Cocoa抽象,是一套Objective-C的API,为了使并发(多线程)编程变得更加简单,但效率比GCD略低. ...
- iOS NSOperation的使用
先给出NSOpetation的官方指导https://developer.apple.com/library/ios/documentation/Cocoa/Reference/NSOperation ...
- iOS -NSOperation并发编程
http://www.cocoachina.com/game/20151201/14517.html http://blog.csdn.net/qinlicang/article/details/42 ...
- iOS NSOperation 封装 通知实现界面更新
#import <Foundation/Foundation.h> #import <UIKit/UIKit.h> @interface MYOperation : NSOpe ...
- iOS NSOperation 异步加载图片 封装NSOperation 代理更新
#import <Foundation/Foundation.h> @class MYOperation; @protocol MYOperationDelecate <NSObje ...
- iOS 中NSOperationQueue,Grand Central Dispatch , Thread的上下关系和区别
In OS X v10.6 and later, operation queues use the libdispatch library (also known as Grand Central D ...
随机推荐
- google翻译,翻译当前的网页
网页翻译为德语(Translate Page To German) <a href="javascript: void(window.open('http://translate.go ...
- RTX发送消息提醒实现以及注意事项
一.RTX简介 RTX是腾讯公司推出的企业级即时通信平台.该平台定位于降低企业通信费用,增强企业内部沟通能力,改善企业与客户之间的沟通渠道,创造新兴的企业沟通文化,提高企业生产力.RTX平台的主要功能 ...
- 参数嗅探(Parameter Sniffing)(2/2)
在参数嗅探(Parameter Sniffing)(1/2)里,我介绍了SQL Server里参数嗅探的基本概念和背后的问题.如你所见,当缓存的计划被SQL Server盲目重用时,会带来严重的性能问 ...
- 拓扑图弹力布局呈现Flickr图片搜索结果
十年前有值得分享的图片我都存在Flickr上,可惜yahoo收购了Flickr之后堕落好多年,最近yahoo在梅姐带领下Flickr团队终于恢复了生机,个人免费存储空间扩充到了1T,界面用户体验也有 ...
- 0414-复利计算器6.0.Release
复利计算器6.0--Release 前言 本次复利计算器的版本更新,主要有以下内容的完善: 1.优化了Web版的页面,提供了更舒服美观的用户体现. 2.新增了移动端(安卓)app版本. 版本信息 项目 ...
- JS 中对象的简单创建和继承
对象的简单创建 1.通过对象直接量创建 比如 var obj = {}; 2.通过new 创建 比如 var obj = new Object(); // 相当于var obj = {}; var a ...
- C#使用基类的引用 and 虚方法和覆写方法
结论:使用基类的引用,访问派生类对象时,得到的是基类的成员. 虚方法和覆写方法
- Linq查询简介
查询是一种从数据源检索数据的表达式. 查询通常用专门的查询语言来表示. 随着时间的推移,人们已经为各种数据源开发了不同的语言:例如,用于关系数据库的 SQL 和用于 XML 的 XQuery. 因此, ...
- css 布局absolute与relative的区别
absolute:当使用时,表示在文档流中没有实际存在位置(浮动),在不设置任何方位值时,只能按兵不动,当设置了方位值之后,会紧接着去寻找距离最近的能够将它包含住的父级元素,然后进行定位. relat ...
- 使用VS GDB扩充套件在VS上远端侦错Linux上的C/C++程序
在 Linux 上开发 C/C++ 程序,或许你会直接(本机或远端)登入 Linux,打开编辑器写完代码后,就用 gcc/g++ 来编译,遇到要除错(debug)的时候,则会选择使用 gdb 来进行除 ...