关闭

NSInvocationOperation、NSBlockOperation、NSOperationQueue

122人阅读 评论(0) 收藏 举报
分类:

创建线程

    //------------------------方式1------------------------
    NSInvocationOperation *operation1 = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(operation1) object:nil];
   //------------------------方式2------------------------
    NSBlockOperation *operation2 = [NSBlockOperation blockOperationWithBlock:^{
        ... ...
    }];
    //------------------------方式3------------------------
    //子类化NSOperation,覆写-(void)main,将任务需要做的操作写入到main方法中

    //------------------------方式4------------------------
    [(NSOperationQueue *)queue addOperationWithBlock:^{
        ... ...
    }];

NSOperation

@interface NSOperation : NSObject

//开始任务
- (void)start;
//
- (void)main;
//任务取消(只能在任务刚被添加进队列,还没开始执行之前进行取消)
- (void)cancel;

//设置依赖关系
    // 前者 ---依赖于---> 后者
    // 后者未执行完毕之前,前者无法执行。
    // 如果在某个任务开始执行之后才设置依赖关系则无效
- (void)addDependency:(NSOperation *)op;

NSOperationQueue

@interface NSOperationQueue : NSObject

//队列的悬停
@property (getter=isSuspended) BOOL suspended;
//最大并发数(可为0,即一个都不执行)
@property NSInteger maxConcurrentOperationCount;
//获取主线程队列
+ (NSOperationQueue *)mainQueue NS_AVAILABLE(10_6, 4_0);
//添加任务
- (void)addOperation:(NSOperation *)op;
1   添加到主队列中的任务会在主线程中执行,主队列中的任务串行执行;
2   创建队列 -> 使队列悬停 -> 设置最大并发数 -> 添加任务 -> 取消悬停 -> 开始执行任务
3   队列的悬停:  (1)保持队列当前的状态,能继续向队列中添加任务/取消任务,但不能开始任务
                (2)对已经开始执行的任务无效
4   队列的最大并发数:   (1)当需要创建串行队列时,将队列的最大并发数设置为1即可
                    (2)当设置为0时不执行任何任务
                    (3)最大并发数只能控制还未执行的任务,不影响已经执行的任务
5   调用子类化的NSOperation里的Main方法,相当于直接在当前线程中执行main方法中的代码,NSThread同理

0
0
查看评论

多线程下NSOperation、NSBlockOperation、NSInvocationOperation、NSOperationQueue的使用

本篇文章主要介绍下多线程下NSOperation、NSBlockOperation、NSInvocationOperation、NSOperationQueue的使用,列举几个简单的例子。 默认情况下,NSOperation并不具备封装操作的能力,必须使用它的子类,使用NSOperation子类...
  • crycheng
  • crycheng
  • 2014-03-22 17:23
  • 14922

NSThread, NSOperationQueue(NSInvocationOperation, NSBlockOperation),GCD

//进程: 程序在计算机的一次执行活动, 一个程序就是一个进程, 在iOS中, 一个app就是一个进程     //线程: 程序执行的最小单元, 一个进程中至少有一个线程(主线程)     //线程中...
  • baidu_31071595
  • baidu_31071595
  • 2016-03-21 23:24
  • 203

ios-day19-03(NSOperation介绍、主队列、自定义队列、NSBlockOperation、NSInvocationOperation)

NSOperationQueue(操作队列)是由GCD提供的队列模型的Cocoa抽象,是一套Object-C的API GCD提供了更加底层的控制,而操作队列则在GCD之上实现了一些方便的功能,这些功能对于开发者而言通常是最好且最安全的选择。 NSOperationQueue有两种不同类型...
  • liu537192
  • liu537192
  • 2015-04-04 00:37
  • 835

[iOS]后台工作队列:NSOperationQueue、NSOperation、NSInvocationOperation

NSOperationQueue 1,operationQueue 里边应该可以同时添加多个operation吧? 是的,本来operationQueue的目的就是多线程管理,那多线程,可不只是一个线程。 而且我们可以设置这个队列每次被处理的“操作”数量 NSOpera...
  • onlyou930
  • onlyou930
  • 2012-04-03 09:33
  • 7744

多线程之NSInvocationOperation NSInvocationOperation & NSOperationQueue

多线程之NSInvocationOperation多线程编程是防止主线程堵塞,增加运行效率等等的最佳方法。而原始的多线程方法存在很多的毛病,包括线程锁死等。在Cocoa中,Apple提供了NSOperation这个类,提供了一个优秀的多线程编程方法。本次介绍NSOperation
  • bopzhou
  • bopzhou
  • 2011-07-27 15:59
  • 380

iOS 多线程下NSOperation、NSBlockOperation、NSInvocationOperation、NSOperationQueue的使用

//联系人:石虎  QQ: 1224614774昵称:嗡嘛呢叭咪哄 本篇文章主要介绍下多线程下NSOperation、NSBlockOperation、NSInvocationOperation、NSOperationQueue的使用,列举几个简单的例子。 ...
  • shihuboke
  • shihuboke
  • 2017-06-24 09:22
  • 198

多线程下NSOperation、NSBlockOperation、NSInvocationOperation、NSOperationQueue的小结

多线程下NSOperation、NSBlockOperation、NSInvocationOperation、NSOperationQueue的使用1> 自定义子类继承NSOperation,实现并发操作或非并发操作 2> NSBlockOperation 3>NSInvoca...
  • u011774517
  • u011774517
  • 2017-04-03 11:53
  • 289

iOS 多线程详解 NSThread, NSOperationQueue(NSInvocationOperation, NSBlockOperation), GCD

//进程: 程序在计算机的一次执行活动, 一个程序就是一个进程, 在iOS中, 一个app就是一个进程 //线程: 程序执行的最小单元, 一个进程中至少有一个线程(主线程) //线程中要注意的几点:1 线程中的autorelease对象不能释放, 必须手动释放或者添加自动释放池 2 ...
  • vaercly
  • vaercly
  • 2014-09-19 20:30
  • 653

NSThread,NSInvocationOperation,NSBlockOperation,GCD解析

iOS有三种多线程编程的技术,分别是: (一) NSThread (二)Cocoa NSOperation (三)GCD(全称:Grand Central Dispatch)   这三种编程方式从上到下,抽象度层次是从低到高的,抽象度越高的使用越简单,也是Apple最推荐使用的。 三种...
  • oik_ios
  • oik_ios
  • 2015-02-26 18:46
  • 646

Creating an NSInvocationOperation Object / NSBlockOperation Object

@implementation MyCustomClass - (NSOperation*)taskWithData:(id)data { NSInvocationOperation* theOp = [[NSInvocationOperation alloc] initWithTarget:s...
  • chuanyituoku
  • chuanyituoku
  • 2014-08-29 10:09
  • 434
    个人资料
    • 访问:11542次
    • 积分:796
    • 等级:
    • 排名:千里之外
    • 原创:70篇
    • 转载:1篇
    • 译文:0篇
    • 评论:0条
    文章分类
    文章存档