NSOperationQueue_管理NSOperation-02-多线程

 1 //
 2 //  ViewController.m
 3 //  01-Thread 《NSOperationQueue》 操作队列——>>管理NSOperation(三种方式创建Operation)
 4 //
 5 //  Created by mac on 16/4/20.
 6 //  Copyright © 2016年 mac. All rights reserved.
 7
 8 /**
 9  *  suspended:暂停
10  */
11
12 #import "SubOperation.h"
13
14 #import "ViewController.h"
15
16 @interface ViewController ()
17
18 @end
19
20 @implementation ViewController
21
22 - (void)viewDidLoad {
23     [super viewDidLoad];
24
25     [self addOperationQueue];
26 }
27
28 - (void)addOperationQueue {
29
30     //主队列:串行执行任务,不管你任务有多少个都是以优先级高低串行执行
31 //    NSOperationQueue *mainQueue = [NSOperationQueue mainQueue];
32
33     //
34     NSOperationQueue *queue = [[NSOperationQueue alloc] init];
35
36     //1) 设置队列任务最大并发数
37     queue.maxConcurrentOperationCount = 1;
38
39     //3) 使得队列处于悬停状态,所有添加到队列中的任务暂缓执行
40     queue.suspended = YES;
41
42     /**NSOpetationQueue是如何管理任务的
43      1)设置最大并发数
44      2)设置优先级
45      3)设置悬停以及恢复队列中的任务运行
46      4)设置依赖关系
47      */
48
49     //1. 最简单的开启多线程方式
50     [queue addOperationWithBlock:^{
51
52         for (int i = 0; i < 100; i ++) {
53             NSLog(@"111=%d", i);
54         }
55     }];
56
57     //2. 使用NSBlockOperation创建任务并添加到队列中执行
58     NSBlockOperation *blockOperation = [NSBlockOperation blockOperationWithBlock:^{
59
60         for (int i = 0; i < 100; i ++) {
61             NSLog(@"222=%d", i);
62         }
63     }];
64 //    [blockOperation start]; //1. start开启任务
65     [queue addOperation:blockOperation]; //2. 把任务添加到队列中执行(推荐使用)
66
67     //3. 使用NSInvocationOperation来创建任务
68     NSInvocationOperation *invocation = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(invocationOperation) object:nil];
69
70     //4) 添加依赖关系:(dependency)
71     [blockOperation addDependency:invocation];
72
73     [queue addOperation:invocation];
74
75     //4. 自定义NSOperation
76     SubOperation *subOperation = [[SubOperation alloc] init];
77     subOperation.name = @"operation4-";
78
79     //2) 任务执行优先级priority
80     subOperation.queuePriority = NSOperationQueuePriorityVeryHigh;
81     [queue addOperation:subOperation];
82
83     //3) 添加任务完成后,恢复当前队列状态,开始执行
84     queue.suspended = NO;
85 }
86 - (void)invocationOperation {
87
88     for (int i = 0; i < 100; i ++) {
89         NSLog(@"333=%d", i);
90     }
91 }
92 @end

主队列和主线程:队列的方式开启多线程,主队列在一定是在主线程中执行的。她俩就这关系,主队列串行执行任务。并发队列可以控制最大并发数,是并发执行任务。

时间: 2024-10-11 05:07:52

NSOperationQueue_管理NSOperation-02-多线程的相关文章

02、Windows Server 2003域账户管理(02)

02.用dsadd在名为test的ou中添加一个账户alice,电话号码1233234br/>用dsmod修改alice的电话为110,邮件地址为[email protected]用dsrm删除alice账户 02.Windows Server 2003域账户管理(02) 原文地址:http://blog.51cto.com/vbers/2118848

NSOperation(多线程)2

// //  ViewController.m //  UI-NO.25多线程-2 // //  Created by Bruce on 15/8/26. //  Copyright (c) 2015年 Bruce. All rights reserved. // /*  NSOperation 是一个 基类 (抽象类) 不能直接使用 必须使用他的子类  他默认是在 当前线程 进行操作   如果单独使用NSOperation 必须手动启动  常与NSOperationQueue一起使用   在与

NSOperation - 02

NSOperationQueue作用: NSOperation可以调用start方法来执行任务,但默认是同步执行的:如果将NSOperation添加到NSOperationQueue中,系统会自动异步执行NSOperation中的操作: 添加操作到NSOperationQueue中: - (void)addOperation:(NSOperation *)p; - (void)addOperationWithBlock:(void (^)(void))block; 最大并发数: 同时执行任务的最

IOS多线程管理&lt;1&gt;关于多线程你必须知道的二三事

/* 不是技术性的文章,只是记录自己每天学习的方式 ----------------------------程序猿的征途是星辰的大海 */ [1] 何为多线程? 在多线程学习之前,很多人将进程,线程,异步,同步,串行,并发混为一谈,概念混淆很严重,甚至在使用一些第三方类库的时候,不知道它进行数据请求使用的是何种方式,是异步还是同步,多线程还是单线程.这里我总结了几天来接触的多线程方面的知识,把概念性的内容理清. 进程:在IOS系统中,经常将一个应用等任务作为一个进程. 1个进程要想执行任务,必须

NSOperation的多线程

NSOperation基于GCD的封装,使用的步骤和GCD相似,①创建队列 ②封装操作任务. NSOperation有两种队列: 主队列: p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #000000; background-color: #ffffff } span.s1 { color: #703daa } NSOperationQueue *queue = [NSOperationQueue mainQ

iOS多线程开发--NSThread NSOperation GCD

多线程 当用户播放音频.下载资源.进行图像处理时往往希望做这些事情的时候其他操作不会被中 断或者希望这些操作过程中更加顺畅.在单线程中一个线程只能做一件事情,一件事情处理不完另一件事就不能开始,这样势必影响用户体验.早在单核处理器时期 就有多线程,这个时候多线程更多的用于解决线程阻塞造成的用户等待(通常是操作完UI后用户不再干涉,其他线程在等待队列中,CPU一旦空闲就继续执行, 不影响用户其他UI操作),其处理能力并没有明显的变化.如今无论是移动操作系统还是PC.服务器都是多核处理器,于是“并行

iOS中的多线程 NSOperation

在ios中,使用多线程有三种方式,分别是:NSThread.NSOperation和NSOperationQueue.GCD,在本节,主要讲解一下NSOperation的使用. NSOperation和NSOperationQueue这种方式实际上是将NSOperation的对象放到一个NSOperationQueue队列中,然后依次启动操作,类似于线程池的使用. 在使用的过程中,NSOperation的操作使用的是它的子类,分别是NSInvocationOperation和NSBlockOpe

iOS多线程编程--NSOperation(转)

这篇文章写得非常不错,基础用法都涉及到了,我把文章提到的例子都写到了demo里面, 原文地址: iOS多线程--彻底学会多线程之『NSOperation』 demo下载:https://github.com/wangdachui/multithreading.git 1. NSOperation简介 NSOperation是苹果提供给我们的一套多线程解决方案.实际上NSOperation是基于GCD更高一层的封装,但是比GCD更简单易用.代码可读性也更高. NSOperation需要配合NSOp

iOS多线程全套:线程生命周期,多线程的四种解决方案,线程安全问题,GCD的使用,NSOperation的使用

目的 本文主要是分享iOS多线程的相关内容,为了更系统的讲解,将分为以下7个方面来展开描述. 多线程的基本概念 线程的状态与生命周期 多线程的四种解决方案:pthread,NSThread,GCD,NSOperation 线程安全问题 NSThread的使用 GCD的理解与使用 NSOperation的理解与使用 Demo在这里:WHMultiThreadDemo Demo的运行gif图如下: 一.多线程的基本概念 进程:可以理解成一个运行中的应用程序,是系统进行资源分配和调度的基本单位,是操作