码迷,mamicode.com
首页 > 编程语言 > 详细

多线程下的NSOperation和NSOperationQueue的使用

时间:2015-03-15 16:52:06      阅读:152      评论:0      收藏:0      [点我收藏+]

标签:多线程   nsoperation   线程   

多线程下的NSOperation和NSOperationQueue的使用

NSOperation和NSOperationQueue的介绍:

NSOperationCocoa中的一个抽象类,用来封装单个任务和代码执行一项操作,由于是抽象类,所以不能直接实例化使用,必须定义子类继承该抽象类来实现,比较常用的NSOperation的子类有NSInvocationOperation,另外,也可以自己继承NSOperation来实现线程的操作。

NSOperationQueue,它相当于一个线程队列或者可以叫做线程池。可以顺序执行队列中的操作,也可以设置队列中操作的优先级。

将上述这两个类配合起来使用,就可以实现多线程编程了。

NSOperation的使用:

NSOperation的两个子类的设置事件的方法:
NSInvocationOperation *operation1 = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(selector:) object:nil];

NSBlockOperation *blockOperation = [[NSBlockOperation alloc] init];
[blockOperation addExecutionBlock:^{
        NSLog(@"1st the thread is %@", [NSThread currentThread]);
    }];

[operation1 start];

第一个是使用NSInvocationOperation来设置事件。

第二个是使用NSBlockOperation来设置事件,事件在代码开中设置。

第三个是单独开启某个NSOperation子类的事件的方法。

NSOperationQueue的使用:

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

 [queue addOperation:operation1];

 [operation1 addDependency:operation2];

第一个方法:创建和初始化队列

第二个方法: 添加事件,如果事件添加了,那么程序就直接运行了

第三个方法:事件的先后顺序设置


使用上述方法实例

@implementation NSOperationController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    [self.view setBackgroundColor:[UIColor whiteColor]];
    
//    [self invocationOperation1];
}

#pragma mark detail method
-(void) invocationOperation1{
//    使用NSInvocationOperation类来设置事件
    NSInvocationOperation *operation1 = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(logTheOperation:) object:@"this is the frist invovationOpration"];
    NSInvocationOperation *operation2 = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(logTheOperation:) object:@"this is the second invocationOperation"];
    
//    使用NSBlockOperation来设置事件,并且添加事件
    NSBlockOperation *blockOperation = [[NSBlockOperation alloc] init];
    [blockOperation addExecutionBlock:^{
        NSLog(@"1st the thread is %@", [NSThread currentThread]);
    }];
    [blockOperation addExecutionBlock:^{
        NSLog(@"2st the thread is %@", [NSThread currentThread]);
    }];
    [blockOperation addExecutionBlock:^{
        NSLog(@"3st the thread is %@", [NSThread currentThread]);
    }];
    
//    在这里我们还可以设置事件的先后顺序,这样一设置,运行顺序应该是blockOperation->operation1->operation2
    [operation1 addDependency:operation2];
    [blockOperation addDependency:operation2];
    
    
//    初始化一个队列
    NSOperationQueue *queue = [[NSOperationQueue alloc] init];
//    将事件添加到队列中
    [queue addOperation:operation1];
    [queue addOperation:operation2];
    [queue addOperation:blockOperation];

    
//    用另一种方法来存放事件
//    [operation1 start];
//    [operation2 start];
//    [blockOperation start];
    
}

-(void) logTheOperation:(NSString *)log
{
    NSLog(@"%@the thread is %@",log, [NSThread currentThread]);
}
@end


技术分享

多线程下的NSOperation和NSOperationQueue的使用

标签:多线程   nsoperation   线程   

原文地址:http://blog.csdn.net/daiyibo123/article/details/44277799

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