NSOperationQueue 创建线程

来源:互联网 发布:兴业银行淘宝网银支付 编辑:程序博客网 时间:2024/06/06 16:39

NSInvocationOperation 创建线程

// 创建队列    NSOperationQueue *queue = [[NSOperationQueue alloc] init];    // 创建操作    NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(download) object:nil];    // operation直接调用start,是同步执行(在当前线程执行操作)//    [operation start];    // 添加操作到队列中,会自动异步执行    [queue addOperation:operation]

NSBlockOperation 创建线程

- (void)viewDidLoad{    [super viewDidLoad];    NSBlockOperation *operation1 = [NSBlockOperation blockOperationWithBlock:^{        NSLog(@"---下载图片----11---%@", [NSThread currentThread]);    }];    [operation1 addExecutionBlock:^{        NSLog(@"---下载图片----12---%@", [NSThread currentThread]);    }];    NSBlockOperation *operation2 = [NSBlockOperation blockOperationWithBlock:^{        NSLog(@"---下载图片----2---%@", [NSThread currentThread]);    }];    NSBlockOperation *operation3 = [NSBlockOperation blockOperationWithBlock:^{        NSLog(@"---下载图片----3---%@", [NSThread currentThread]);    }];    NSBlockOperation *operation4 = [NSBlockOperation blockOperationWithBlock:^{        NSLog(@"---下载图片----4---%@", [NSThread currentThread]);    }];    // 1.创建队列    NSOperationQueue *queue = [[NSOperationQueue alloc] init];    // 主队列//    NSOperationQueue *queue = [NSOperationQueue mainQueue];    // 2.添加操作到队列中(自动异步执行)    [queue addOperation:operation1];    [queue addOperation:operation2];    [queue addOperation:operation3];    [queue addOperation:operation4];}- (void)test{    //    NSBlockOperation *operation = [NSBlockOperation blockOperationWithBlock:^{    //        NSLog(@"---下载图片----1---%@", [NSThread currentThread]);    //    }];    NSBlockOperation *operation = [[NSBlockOperation alloc] init];    [operation addExecutionBlock:^{        NSLog(@"---下载图片----1---%@", [NSThread currentThread]);    }];    [operation addExecutionBlock:^{        NSLog(@"---下载图片----2---%@", [NSThread currentThread]);    }];    [operation addExecutionBlock:^{        NSLog(@"---下载图片----3---%@", [NSThread currentThread]);    }];    [operation start];    // 任务数量 > 1,才会开始异步执行}

线程间的依赖

- (void)dependency{    /**     假设有A、B、C三个操作,要求:     1. 3个操作都异步执行     2. 操作C依赖于操作B     3. 操作B依赖于操作A     */    // 1.创建一个队列(非主队列)    NSOperationQueue *queue = [[NSOperationQueue alloc] init];    // 2.创建3个操作    NSBlockOperation *operationA = [NSBlockOperation blockOperationWithBlock:^{        NSLog(@"A1---%@", [NSThread currentThread]);    }];    //    [operationA addExecutionBlock:^{    //        NSLog(@"A2---%@", [NSThread currentThread]);    //    }];    //    //    [operationA setCompletionBlock:^{    //        NSLog(@"AAAAA---%@", [NSThread currentThread]);    //    }];    NSBlockOperation *operationB = [NSBlockOperation blockOperationWithBlock:^{        NSLog(@"B---%@", [NSThread currentThread]);    }];    NSBlockOperation *operationC = [NSBlockOperation blockOperationWithBlock:^{        NSLog(@"C---%@", [NSThread currentThread]);    }];    // 设置依赖    [operationB addDependency:operationA];    [operationC addDependency:operationB];    // 3.添加操作到队列中(自动异步执行任务)    [queue addOperation:operationC];    [queue addOperation:operationA];    [queue addOperation:operationB];}

线程的最大并发数

- (void)maxCount{    // 1.创建一个队列(非主队列)    NSOperationQueue *queue = [[NSOperationQueue alloc] init];    // 2.设置最大并发(最多同时并发执行3个任务)    queue.maxConcurrentOperationCount = 3;    // 3.添加操作到队列中(自动异步执行任务,并发)    NSBlockOperation *operation1 = [NSBlockOperation blockOperationWithBlock:^{        NSLog(@"下载图片1---%@", [NSThread currentThread]);    }];    NSBlockOperation *operation2 = [NSBlockOperation blockOperationWithBlock:^{        NSLog(@"下载图片2---%@", [NSThread currentThread]);    }];    NSBlockOperation *operation3 = [NSBlockOperation blockOperationWithBlock:^{        NSLog(@"下载图片3---%@", [NSThread currentThread]);    }];    NSBlockOperation *operation4 = [NSBlockOperation blockOperationWithBlock:^{        NSLog(@"下载图片4---%@", [NSThread currentThread]);    }];    NSInvocationOperation *operation5 = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(download) object:nil];    [queue addOperation:operation1];    [queue addOperation:operation2];    [queue addOperation:operation3];    [queue addOperation:operation4];    [queue addOperation:operation5];    [queue addOperationWithBlock:^{        NSLog(@"下载图片5---%@", [NSThread currentThread]);    }];    [queue addOperationWithBlock:^{        NSLog(@"下载图片6---%@", [NSThread currentThread]);    }];    [queue addOperationWithBlock:^{        NSLog(@"下载图片7---%@", [NSThread currentThread]);    }];    [queue addOperationWithBlock:^{        NSLog(@"下载图片8---%@", [NSThread currentThread]);    }];    [queue addOperationWithBlock:^{        NSLog(@"下载图片9---%@", [NSThread currentThread]);    }];    [queue cancelAllOperations];}

#

原创粉丝点击