当前位置:首页 > 操作系统 > Ios

iosNSOperation的简单用法

今天身心疲惫啊,这几天跑的腿都软了,有上海的朋友吗?我在找工作,需要一份工作,求看见的同行帮我留意下。非常感谢。我的qq就是820203420.同时也希望能够继续给大家带来更好的文章,有时间我会开源一个项目,希望大家留意,或者可以联系我,我们一起开源。晚安。

#import "ViewController.h"


@interface ViewController ()


@end


@implementation ViewController


- ( void )viewDidLoad {

    [ super viewDidLoad ];


    

#if 0

    //    NSOperation / NSOperationQueue  是基于 GCD 封装的面向对象的多线程类  GCD是纯c语言  GCD相对来说高效些

    

    //NSOperation / NSOperationQueue 开发步骤

    // 1. 创建 NSOperation 对象,该对象中封装任务。

    // 2. 创建 NSOperationQueue 操作队列,将 NSOperation 对象扔入到操作队列中。

    // 3. 将操作加入到操作队列后,系统会自动的将队列中的操作拿出来放到线程上执行。

    

    //NSOperation 是一个抽象类 ( 不能实例化对象的类 ) 。他有两个子类

    //    NSInvocationOperation

    //    NSBlockOperation

    // 创建操作对象时,必须使用这些子类来实例化

    

    // NSOperationQueue 操作队列只有两种,

    // 1. 自定义操作队列,通过 alloc init 创建的。这个队列的任务在子线程中并发执行。

    // 2. 主队列   GCD 的主队列相似, 添加到主队列中得任务,都会在主线程中执行。

    //    [NSOperationQueue mainQueue]; 获取主队列的方式

    

    // 创建操作对象,该对象中封装任务。

    NSInvocationOperation *invOperation = [[NSInvocationOperation alloc]initWithTarget: self selector: @selector (test) object: nil ];

    

    // 执行操作中得任务。 默认情况下在主线程中执行

    [invOperation start];

    

    

    // 创建操作,任务保存在 block

    NSBlockOperation *blockOperation = [NSBlockOperation blockOperationWithBlock:^{

        NSLog( @"blockOperation thread = %@" ,[NSThread currentThread]);

    }];

    

    for ( int i = 0 ; i< 10 ; i++) {

        [blockOperation addExecutionBlock:^{

            NSLog( @"blockOperation %d thread = %@" ,i,[NSThread currentThread]);

        }];

    }

    

    // 执行操作中得任务。 默认情况下在主线程中执行 , 如果 blockOperation 中的任务个数大于 1 ,其他的任务在子线程中执行

    [blockOperation start];

 

#else

    

    //    ----------   实际使用 ------------------

    // 1. 创建操作对象

    

    NSInvocationOperation *invocationOp = [[ NSInvocationOperation alloc ] initWithTarget : self selector : @selector (test) object : nil ];

    NSBlockOperation *blockOp = [ NSBlockOperation blockOperationWithBlock :^{

        for ( int i = 0 ; i< 5 ; i++) {

            NSLog ( @"blockOp thread = %@" ,[ NSThread currentThread ]);

        }

    }];

    

    // 2. 将操作对象加入操作队列中 , 添加到队列中的任务,会自动在子线程中执行。

    // 创建操作队列

    NSOperationQueue *queue = [[ NSOperationQueue alloc ] init ];

    [queue addOperation :invocationOp];

    [queue addOperation :blockOp];

    

    

    for ( int i = 0 ; i< 5 ; i++) {

        NSBlockOperation *bOp =  [ NSBlockOperation blockOperationWithBlock :^{

            NSLog ( @"blockOp i = %d thread = %@" ,i,[ NSThread currentThread ]);

        }];

        // 添加到主队列中得任务,都在主线程中按顺序执行。

        //        [[NSOperationQueue mainQueue] addOperation:bOP];

    }

    

    

#endif

}

-( void )test

{

    

    

    for ( int i = 0 ; i< 5 ; i++) {

        NSLog ( @"InvocationOperation thread = %@" ,[ NSThread currentThread ]);

    }

}

@end

原文:http://blog.csdn.net/wq820203420/article/details/45049451


【说明】本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!