码迷,mamicode.com
首页 > 移动开发 > 详细

iosNSOperation的简单用法

时间:2015-04-15 09:43:07      阅读:211      评论:0      收藏:0      [点我收藏+]

标签:ios开发   线程   多线程   ios   gcd   

今天身心疲惫啊,这几天跑的腿都软了,有上海的朋友吗?我在找工作,需要一份工作,求看见的同行帮我留意下。非常感谢。我的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

iosNSOperation的简单用法

标签:ios开发   线程   多线程   ios   gcd   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!