码迷,mamicode.com
首页 > 其他好文 > 详细

2016 - 1 -19 初探NSOperation

时间:2016-01-19 19:06:37      阅读:106      评论:0      收藏:0      [点我收藏+]

标签:

一:简介

1.NSOperation的作用:

配合NSOperation与NSOperationQueue也可以实现多线程。

2.NSOperation与NSOperationQueue实现多线程的步骤:

  2.1现将需要执行的操作封装到NSOperation对象中

  2.2然后将NSOperation添加到NSOperationQueue中

  2.3系统会自动将NSOPerationQueue中的NSOPeration取出来

二:NSOPeration的子类

1.NSOPeration是个抽象类,并不具备封装操作的能力,必须使用他的子类。

 

2.使用NSOPeration子类的方式有三种:

2.1NSInvocationOpertation

2.2NSBlockOperating

2.3自定义子类继承NSOperation,实现内部相应方法

 

三:NSOPerationQueue

1.NSOperationQueue 的类型:

 1.1主队列,通过 [NSOperationQueue mainQueue];可以获得。

 1.2其他队列:串行队列,并发队列。 通过 [[NSOperationQueue alloc ] init];可以获得。

2.使用:

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
   NSOperationQueue *opQ = [[NSOperationQueue alloc ] init];
    
    NSInvocationOperation *op1 = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(run1) object:nil];
    
    NSInvocationOperation *op2 = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(run2) object:nil];
    
    [opQ addOperation:op1];// 会在内部调用[op1 start]这个方法并放入子线程内
    
    [opQ addOperation:op2];
}
- (void)run1{
    NSLog(@"1 ------ %@",[NSThread currentThread]);
}
- (void)run2{
    NSLog(@"2  ------ %@",[NSThread currentThread]);
}

3.自定义Operation

3.1使用场景:当操作比较复杂时,就可以自定义一个NSOperation,然后将复杂的操作放在自定义operation里。

3.2实现:

   3.2.1需要在自定义Operation中重写main函数:

    如:

- (void)main
{
    NSLog(@"%@-----------------自定义Operation",[NSThread currentThread]);
}

  3.2.2创建自定义Operation 添加到队列里去:  

    ZZNSOpertation *op3 = [[ZZNSOpertation alloc] init];

    [opQ addOperation:op3];

  3.2.3打印结果:

2016-01-19 17:43:39.941 NSPerationQueue[16438:1477860] <NSThread: 0x7ff00a60d600>{number = 4, name = (null)}-----------------自定义Operation

 

 

2016 - 1 -19 初探NSOperation

标签:

原文地址:http://www.cnblogs.com/BJTUzhengli/p/5142916.html

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