多线程-NSOperation

原创 2016年05月30日 20:42:29

基本概念
//操作:(任务)想要执行的操作,想要做的事情
//队列:专门用来存放任务的

//使用步骤
//1.创建一个队列对象
//2.创建一个任务对象
//3.将任务对象放到队列中(系统会自动将任务从队列中取出来,并且开启新的线程去执行任务)

=====基本使用=====
//NSInvocationOperation创建任务
-(void)test1{
//1.创建队列
NSOperationQueue* queue = [[NSOperationQueue alloc] init];
//2.创建任务
//参数1:响应消息的对象
//参数2:需要执行的操作
//参数3:选择器中方法实参
NSInvocationOperation* operation = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(longTimeOperation:) object:@0];
//3.将单个任务添加到队列中
[queue addOperation:operation];
//4.将多个任务添加到队列中
for (int i = 0; i<20; i++) {
//创建一个任务
NSInvocationOperation* OP = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(longTimeOperation:) object:[NSNumber numberWithInt:i]];
OP.name = [NSString stringWithFormat:@”我是子线程”];
//将任务放到队列中
[queue addOperation:OP];
}
}
-(void)longTimeOperation:(NSNumber*)number{
NSLog(@”%@,%@”,[NSThread currentThread],number);
}
//NSBlockOperation创建任务
-(void)test2{
//2.创建任务/操作
NSBlockOperation* Op = [NSBlockOperation blockOperationWithBlock:^{
[self longTimeOperation:@19];
}];
[self.queue addOperation:Op];
//========添加多个任务========
for (int i = 0; i<20; i++) {
NSBlockOperation* Op = [NSBlockOperation blockOperationWithBlock:^{
[self longTimeOperation:@(i)];
}];
[self.queue addOperation:Op];
}
}
-(void)test3{
//将一个bolck类型的任务添加到队列中
[self.queue addOperationWithBlock:^{
//需要执行的操作
[self longTimeOperation:@0];
}];
}
-(void)test4{
[self.queue addOperationWithBlock:^{
NSData* data = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:@”http://preview.quanjing.com/tongro_rf002/tds003tg2260.jpg“]];
UIImage* image = [UIImage imageWithData:data];
//回到主线程
//拿到主队列
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
self.loadIMAGE.image = image;
NSLog(@”%@”,[NSThread currentThread]);
}];
}];
}

=====高级应用=====
//最大并发数(限制每次同时执行的任务的个数),默认有多少个任务同时开启多少个线程
-(void)test5{
//设置队列的最大并发数(2~3)
self.queue.maxConcurrentOperationCount = 3;
for (int i = 0; i<200; i++) {
[self.queue addOperationWithBlock:^{
[self longTimeOperation:@(i)];
sleep(1);
}];
}
}
//暂停、恢复队列
//暂停是暂停从队列中取出任务来执行,但是已经从队列里面取出来的任务,不再受队列的限制
//test6
- (IBAction)btnClick:(UIButton *)sender {
static int i = 0;
if (i == 0 ) {
i = 1;

    [sender setTitle:@"开始" forState:UIControlStateNormal];
    [self.queue setSuspended:YES];
}else{
    i = 0;
    [sender setTitle:@"暂停" forState:UIControlStateNormal];
    [self.queue setSuspended:NO];
}

}
//取消队列
//将队列中所有的任务从队列中移除,不可以恢复。但是已经从队列中取出的任务不会被取消
//test7
- (IBAction)cancel:(id)sender {
[self.queue cancelAllOperations];
// [[NSOperationQueue mainQueue] cancelAllOperations];
}
//操作依赖
-(void)test8{
NSBlockOperation* block1 = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@”1”);
}];
NSBlockOperation* block2 = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@”2”);
}];
//添加依赖关系,让B依赖A(A执行完再执行B);注意:1.依赖关系一定要在任务添加到队列之前添加2.不能循环依赖
[block2 addDependency:block1];
[self.queue addOperations:@[block1,block2] waitUntilFinished:NO];
NSLog(@”123”);
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

iOS 多线程NSoperation

  • 2017-06-30 17:35
  • 39KB
  • 下载

iOS多线程NSOperation的使用

NSOperation是iOS中一种多线程技术的实现,基于GCD,比GCD更加面向对象,和类NSOperationQueue配合使用。NSOperation是一个抽象类,我们不能直接使用它,应该使用它...

【iOS】多线程NSOperation

NSOperation是苹果封装的一套多线程的东西,不像GCD是纯C语言的,这个是OC的。但相比较之下GCD会更快一些,但本质上NSOPeration是多GDC的封装。 一、NSOperation与G...

iOS开发多线程篇—NSOperation基本操作

iOS开发多线程篇—NSOperation基本操作 一、并发数 (1)并发数:同时执⾏行的任务数.比如,同时开3个线程执行3个任务,并发数就是3 (2)最大并发数:同一时间最多只能执...

使用NSOperation和NSOperationQueue启动多线程

在app store中的很多应用程序非常的笨重,他们有好的界面,但操作性很差,比如说当程序从网上或本地载入数据的时候,界面被冻结了,用户只能等程序完全载入数据之后才能进行操作。当打开一个应用程序时,i...

iOS开发多线程篇—NSOperation基本操作

一、并发数 (1)并发数:同时执⾏行的任务数.比如,同时开3个线程执行3个任务,并发数就是3 (2)最大并发数:同一时间最多只能执行的任务的个数。 (3)最⼤大并发数的相关⽅方法 ...

多线程复习-NSOperation

NSInvocationOperation NSBlockOperation NSOperationQueue NSOperation 多线程

IOS_多线程_NSThread+NSOperation+GCD(Grand Central Dispatcher)

H:/0729/01_对象方法创建NSThread+加锁+售票_ViewController.h// ViewController.h // 卖票 // Created by apple on ...

iOS开发多线程篇—NSOperation简单介绍

一、NSOperation简介 1.简单说明 NSOperation的作⽤:配合使用NSOperation和NSOperationQueue也能实现多线程编程 NSOperation...

iOS开发多线程-自定义NSOperation

一、实现一个简单的tableView显示效果 实现效果展示:   代码示例(使用以前在主控制器中进行业务处理的方式) 1.新建一个项目,让控制器继承自UITableViewControlle...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)