多线程-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
  • 下载

多线程、特别是NSOperation 和 GCD 的内部原理

多线程、特别是NSOperation 和 GCD 的内部原理 简介 多线程是一个比较轻量级的方法来实现单个应用程序内多个代码执行路径。 在系统级别内,程序并排执行,程序分配到每个程序的执行时间是...

多线程开发之NSOperation

一、简介一个NSOperation对象可以通过调用start方法来执行任务,默认是同步执行的。也可以将NSOperation添加到一个NSOperationQueue(操作队列)中去执行,而且是异步执...

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

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

iOS多线程总结(3)——NSOperation与NSOperationQueue的使用

本篇是多线程总结的第三篇,关于多线程的概念和NSThread的使用写在第一篇,《iOS多线程总结(1)——多线程相关概念及NSObject/NSThread的使用 》,第二篇《iOS多线程总结(2)—...

多线程开发之NSOperation与NSThread

以下是开发初期收集整理的一点资料  多线程之NSInvocationOperation 多线程编程是防止主线程堵塞,增加运行效率等等的最佳方法。而原始的多线程方法存在很多的毛病,包括线程锁死等...

【iOS】多线程NSOperation

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

【iOS】多线程NSOperation 与 GCD的区别

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

多线程 - 10.NSOperation的使用示例

1.NSOperationQueue概述 NSOperationQueue的作用 NSOperation可以调用start方法来执行任务,但默认是同步执行的 如果将NSOperation添加到NSO...

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

H:/0729/01_对象方法创建NSThread+加锁+售票_ViewController.h// ViewController.h // 卖票 // Created by apple on ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:多线程-NSOperation
举报原因:
原因补充:

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