首页 > 编程语言 > 详细

UI进阶之多线程(NSOperation)

时间:2016-04-09 11:53:33      阅读:285      评论:0      收藏:0      [点我收藏+]
#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    
#pragma mark --NSInvocationOperation方法--
    //NSOperation 是一个抽象类 不能直接使用
    //通过NSInvocationOperation 类来创建以一个NSOperation对象
    //NSOperation 类及其子类本身不会进行线程的创建
    
    NSInvocationOperation *operation = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(hehe) object:nil];
    
    //operation在单独使用的时候 一定要调用开始方法
   // [operation start];
    
    
#pragma mark -- NSBlockOperation方法--
    
    //使用NSBlockOperation 创建一个NSOperation对象
    NSBlockOperation *blockOperation = [NSBlockOperation blockOperationWithBlock:^{
        
        NSLog(@" main2 == %@", [NSThread mainThread]);
        
        NSLog(@"current2 ==%@", [NSThread currentThread]);
        
        NSLog(@"bbb");
        
    }];
    
   // [blockOperation start];
    
    
    NSOperationQueue *queue = [[NSOperationQueue alloc]init];
    
    //给两个任务添加一个依赖关系 这两个任务就会按照依赖关系顺序执行
    [operation addDependency:blockOperation];
  
//    queue.maxConcurrentOperationCount = 2;
    
    [queue addOperation:operation];
    [queue addOperation:blockOperation];
    
    //获取系统提供的主队列
    NSOperationQueue *mainQueue = [NSOperationQueue mainQueue];
    

}

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
    
    //NSOperationQueue 是一个队列管理器, 可以根据operation 任务自己分配线程, 自己管理线程的生命周期
    //在开发过程中,我们不需要管理线程的创建和销毁
    //NSOperationQueue 创建的是n个并行的线程
    
    NSOperationQueue *queue = [[NSOperationQueue alloc]init];
    
    //最大线程并发数
    //maxConcurrentOperationCount 表示同时执行任务的最大数量
    //即使只执行一个任务, 系统有的时候也会开辟多个线程去执行这个任务
    queue.maxConcurrentOperationCount = 1;
    
    for (int i = 0; i < 10; i++) {
        
        NSBlockOperation *operation = [NSBlockOperation blockOperationWithBlock:^{
           
            NSLog(@"current%d = %@", i, [NSThread currentThread]);
            
            
            
        }];
        
        
        [queue addOperation:operation];
    }
   
}

- (void)hehe
{
    NSLog(@" main == %@", [NSThread mainThread]);
    
    NSLog(@"current ==%@", [NSThread currentThread]);
    NSLog(@"??");
}

 

UI进阶之多线程(NSOperation)

原文:http://www.cnblogs.com/huyibo/p/5371103.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!