文档章节

NSOperationQueue

阿元
 阿元
发布于 2016/05/17 10:11
字数 489
阅读 19
收藏 0

 


#import <UIKit/UIKit.h>

@interface VCRoot : UIViewController

@end
#import "VCRoot.h"

@interface VCRoot ()
@property (assign,atomic) int count ;
@end

@implementation VCRoot
{
    //任务队列
    //可以将任务(线程的抽象)添加到队列中来管理
    //可以同时并发多个任务
    NSOperationQueue* _optQueue ;
    NSData* data  ;
}

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    
    //创建一个任务队列
    //队列中的元素为任务对象
    //任务对象继承于NSOperation
    _optQueue = [[NSOperationQueue alloc] init] ;
    
    //设置任务的最大并发数量
    [_optQueue setMaxConcurrentOperationCount:5] ;
}

-(void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    //创建一个任务对象
    //将事件函数封装到任务中
    //将来在队列中执行
    NSInvocationOperation* tast01 = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(updateOpt01) object:nil] ;
    //将任务添加到队列中
    [_optQueue addOperation:tast01] ;
    
    
    //方法二
    //创建一个任务属性对象
    NSInvocation* invo = [[NSInvocation alloc] init] ;
    //目标对象
    invo.target = self ;
    //事件函数
    invo.selector = @selector(updateOpt02) ;
    
    NSInvocationOperation* tast02 = [[NSInvocationOperation alloc] initWithInvocation:invo] ;
    //将第二个任务添加到队列中
    [_optQueue addOperation:tast02] ;
    
    
    //方法三
    NSMutableArray* arrayTask = [[NSMutableArray alloc] init] ;
    for (int i = 0 ; i < 3; i++)
    {
        //创建多个任务,将任务添加到数组中
        NSInvocationOperation* task = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(updateOpt) object:nil] ;
    
        [arrayTask addObject:task] ;
    }
    //将任务数组添加到任务队列中
    //是否等待之前的任务结束后开始执行
    [_optQueue addOperations:arrayTask waitUntilFinished:YES] ;
    
//    第四种方法,使用block来添加任务
//    添加一个block块对象作为任务队列的任务
    [_optQueue addOperationWithBlock:^
    {
        int count = 0 ;
        for (int i = 0 ; i < 10000; i++)
        {
            count++ ;
            NSLog(@"count = %d",count) ;
        }
    }] ;
}

-(void) readFile
{
    data = [NSData dataWithContentsOfFile:@"/users/qianfeng/Desktop/office.zip"] ;
}

-(void) updateOpt01
{
    NSLog(@"任务一执行....");
    
    [data writeToFile:@"/users/qianfeng/Desktop/office01.zip" atomically:YES] ;
    
//    [NSThread exit] ;
    
    NSThread* t = [NSThread currentThread] ;
    [t cancel] ;
    while (true)
    {
        //休眠时间
        [NSThread sleepForTimeInterval:0.01] ;
        NSLock* lock = [[NSLock alloc] init] ;
        
        int k = 0 ;
        
        [lock lock] ;
        k++ ;
        [lock unlock] ;
        
        [NSThread isMainThread] ;
    }

}

-(void) updateOpt11
{
    NSLog(@"任务一执行....");
    
    [data writeToFile:@"/users/qianfeng/Desktop/office02.zip" atomically:YES] ;
}

-(void) updateOpt12
{
    NSLog(@"任务一执行....");
    
    [data writeToFile:@"/users/qianfeng/Desktop/office03.zip" atomically:YES] ;
}

-(void) updateOpt02
{
    NSLog(@"任务二执行...");
}

-(void) updateOpt
{
    NSLog(@"任务数组中的任务执行!");
    [NSThread sleepForTimeInterval:5];
}

@end

© 著作权归作者所有

共有 人打赏支持
上一篇: FMDB使用
下一篇: NSThread
阿元
粉丝 5
博文 163
码字总数 109721
作品 0
浦东
程序员
私信 提问
iOS GCD 与 NSOperationQueue对比

NSOperationQueue 是在GCD基础上实现的,只不过是GCD更高一层的抽象。 GCD 只支持FIFO 的队列, 而NSOperationQueue可以调整队列的执行顺序。(通过调整权重) NSOperationQueue可以在Opera...

董桉远
2013/11/26
0
0
iphone多线程汇总

1,NSThread - (void)updateImageForCellAtIndexPath:(NSIndexPath *)indexPath { NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; UIImage *image = [self getImageForCellAtI......

长平狐
2012/08/13
93
0
iOS多线程之NSOperation

1.简介 1.1NSOperation的作用 配合使用NSOperation和NSOperationQueue也能实现多线程编程 1.2NSOperation和NSOperationQueue实现多线程的具体步骤 先将需要执行的操作封装到一个NSOperation...

JlongTian
2016/01/10
33
0
iOS之[多线程:NSOperation]

NSOperation :fa-exclamation-triangle:以下是你需要考虑使用 NSOperation 的一些理由: 1.当你需要取消线程任务时,GCD 无法提供取消任务的操作。而 NSOperation 提供了取消任务的操作; 2.当...

言筱羽
2015/11/23
95
0
iOS多线程:『NSOperation、NSOperationQueue』详尽总结

iOS多线程:『NSOperation、NSOperationQueue』详尽总结 转载: 原地址https://www.jianshu.com/p/4b1d77054b35 本文首发于我的个人博客:『不羁阁』 文章链接:传送门 本文更新时间:2018年0...

法斗斗
2018/04/20
0
0

没有更多内容

加载失败,请刷新页面

加载更多

数据库篇一

数据库篇 第1章 数据库介绍 1.1 数据库概述  什么是数据库(DB:DataBase) 数据库就是存储数据的仓库,其本质是一个文件系统,数据按照特定的格式将数据存储起来,用户可以对数据库中的数据...

stars永恒
30分钟前
2
0
Intellij IDEA中设置了jsp页面,但是在访问页面时却提示404

在Intellij IDEA中设置了spring boot的jsp页面,但是在访问时,却出现404,Not Found,经过查找资料后解决,步骤如下: 在Run/Debug Configurations面板中设置该程序的Working Directory选项...

uknow8692
昨天
2
0
day24:文档第五行增内容|每月1号压缩/etc/目录|过滤文本重复次数多的10个单词|人员分组|

1、在文本文档1.txt里第五行下面增加如下内容;两个方法; # This is a test file.# Test insert line into this file. 分析:给文档后增加内容,可以用sed 来搞定;也可以用while do done...

芬野de博客
昨天
2
0
深入理解JVM—JVM内存模型

深入理解JVM—JVM内存模型 我们知道,计算机CPU和内存的交互是最频繁的,内存是我们的高速缓存区,用户磁盘和CPU的交互,而CPU运转速度越来越快,磁盘远远跟不上CPU的读写速度,才设计了内存...

onedotdot
昨天
2
0
MVC、MVCS、MVVM、MVP、VIPER等这么多架构模式哪一个好呢?

在项目开启阶段,其中一个很重要的环节就是选架构。 那么面对目前已知的这么多架构模式我们该怎么选择呢?这确实是个很让人头疼的问题! 下面我就在这里梳理一下目前常见的一些架构模式。 先...

Java干货分享
昨天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部