iOS开发多线程篇—NSOperation简单介绍

POWER(十一)charge pump原理 电荷泵是一种基于电容充放电原理的DC-DC转换电路,通过开关控制实现电压转换,包括升压、降压和负压输出。其核心是利用电荷守恒原理,通过电容存储和转移电荷来改变输出电压。典型拓扑结构包括倍压电路和多阶升压电路,具有结构简单、体积小等优势。关键参数包括转换效率、输出电流能力和开关频率,适用于芯片供电、显示屏驱动等低功耗场景。LVDS部分补充说明了自举电路在驱动电路中的应用及其自同步特性。 阅读详情

一、NSOperation简介

1.简单说明

NSOperation的作⽤:配合使用NSOperation和NSOperationQueue也能实现多线程编程

NSOperation和NSOperationQueue实现多线程的具体步骤:

(1)先将需要执行的操作封装到一个NSOperation对象中

(2)然后将NSOperation对象添加到NSOperationQueue中

(3)系统会⾃动将NSOperationQueue中的NSOperation取出来

(4)将取出的NSOperation封装的操作放到⼀条新线程中执⾏

 2.NSOperation的子类

NSOperation是个抽象类,并不具备封装操作的能力,必须使⽤它的子类

使用NSOperation⼦类的方式有3种:

(1)NSInvocationOperation

(2)NSBlockOperation

(3)自定义子类继承NSOperation,实现内部相应的⽅法

二、 具体说明

1.NSInvocationOperation子类

创建对象和执行操作:

复制代码
1  //创建操作对象,封装要执行的任务
2     //NSInvocationOperation   封装操作
3     NSInvocationOperation *operation=[[NSInvocationOperation alloc]initWithTarget:self selector:@selector(test) object:nil];
4     
5     //执行操作
6     [operation start];
复制代码

说明:一旦执⾏操作,就会调用target的test方法

代码示例:

复制代码
 1 //
 2 //  YYViewController.m
 3 //  01-NSOperation基本1
 4 //
 5 //  Created by 孔医己 on 14-6-25.
 6 //  Copyright (c) 2014年 itcast. All rights reserved.
 7 //
 8 
 9 #import "YYViewController.h"
10 
11 @interface YYViewController ()
12 
13 @end
14 
15 @implementation YYViewController
16 
17 - (void)viewDidLoad
18 {
19     [super viewDidLoad];
20     
21     //NSOperation:抽象类,不具备封装功能
22     
23     //创建操作对象,封装要执行的任务
24     //NSInvocationOperation   封装操作
25     NSInvocationOperation *operation=[[NSInvocationOperation alloc]initWithTarget:self selector:@selector(test) object:nil];
26     
27     //执行操作
28     [operation start];
29 
30 }
31 
32 -(void)test
33 {
34     
35     NSLog(@"--test--%@--",[NSThread currentThread]);
36 }
37 @end
复制代码

打印查看:

注意:操作对象默认在主线程中执行,只有添加到队列中才会开启新的线程。即默认情况下,如果操作没有放到队列中queue中,都是同步执行。只有将NSOperation放到一个NSOperationQueue中,才会异步执行操作 

 

2.NSBlockOperation子类

创建对象和添加操作:

复制代码
 1   //创建NSBlockOperation操作对象
 2     NSBlockOperation *operation=[NSBlockOperation blockOperationWithBlock:^{
 3         //......
 4     }];
 5     
 6     //添加操作
 7     [operation addExecutionBlock:^{
 8         //....
 9     }];
10     
复制代码

代码示例:

代码1:

复制代码
 1 //
 2 //  YYViewController.m
 3 //  02-NSTherad基本2
 4 //
 5 //  Created by 孔医己 on 14-6-25.
 6 //  Copyright (c) 2014年 itcast. All rights reserved.
 7 //
 8 
 9 #import "YYViewController.h"
10 
11 @interface YYViewController ()
12 
13 @end
14 
15 @implementation YYViewController
16 
17 - (void)viewDidLoad
18 {
19     [super viewDidLoad];
20     
21     //创建NSBlockOperation操作对象
22     NSBlockOperation *operation=[NSBlockOperation blockOperationWithBlock:^{
23         NSLog(@"NSBlockOperation------%@",[NSThread currentThread]);
24     }];
25     
26     
27     //开启执行操作
28     [operation start];
29 }
30 @end
复制代码

打印查看:

代码2:

复制代码
 1 //
 2 //  YYViewController.m
 3 //  02-NSTherad基本2
 4 //
 5 //  Created by 孔医己 on 14-6-25.
 6 //  Copyright (c) 2014年 itcast. All rights reserved.
 7 //
 8 
 9 #import "YYViewController.h"
10 
11 @interface YYViewController ()
12 
13 @end
14 
15 @implementation YYViewController
16 
17 - (void)viewDidLoad
18 {
19     [super viewDidLoad];
20     
21     //创建NSBlockOperation操作对象
22     NSBlockOperation *operation=[NSBlockOperation blockOperationWithBlock:^{
23         NSLog(@"NSBlockOperation------%@",[NSThread currentThread]);
24     }];
25     
26     //添加操作
27     [operation addExecutionBlock:^{
28         NSLog(@"NSBlockOperation1------%@",[NSThread currentThread]);
29     }];
30     
31     [operation addExecutionBlock:^{
32         NSLog(@"NSBlockOperation2------%@",[NSThread currentThread]);
33     }];
34     
35     //开启执行操作
36     [operation start];
37 }
38 @end
复制代码

注意:只要NSBlockOperation封装的操作数 > 1,就会异步执行操作 

 

3.NSOperationQueue

NSOperationQueue的作⽤:NSOperation可以调⽤start⽅法来执⾏任务,但默认是同步执行的

如果将NSOperation添加到NSOperationQueue(操作队列)中,系统会自动异步执行NSOperation中的操作

添加操作到NSOperationQueue中,自动执行操作,自动开启线程

 

复制代码
 1     //创建NSOperationQueue
 2     NSOperationQueue * queue=[[NSOperationQueue alloc]init];
 3     //把操作添加到队列中
 4     //第一种方式
 5     [queue addOperation:operation1];
 6     [queue addOperation:operation2];
 7     [queue addOperation:operation3];
 8     //第二种方式
 9     [queue addOperationWithBlock:^{
10         NSLog(@"NSBlockOperation3--4----%@",[NSThread currentThread]);
11     }];
复制代码

 

- (void)addOperation:(NSOperation *)op;
- (void)addOperationWithBlock:(void (^)(void))block; 

代码示例:

复制代码
 1 //
 2 //  YYViewController.m
 3 //  03-NSOperation基本3
 4 //
 5 //  Created by 孔医己 on 14-6-25.
 6 //  Copyright (c) 2014年 itcast. All rights reserved.
 7 //
 8 
 9 #import "YYViewController.h"
10 
11 @interface YYViewController ()
12 
13 @end
14 
15 @implementation YYViewController
16 
17 - (void)viewDidLoad
18 {
19     [super viewDidLoad];
20 
21     //创建NSInvocationOperation对象,封装操作
22     NSInvocationOperation *operation1=[[NSInvocationOperation alloc]initWithTarget:self selector:@selector(test1) object:nil];
23     NSInvocationOperation *operation2=[[NSInvocationOperation alloc]initWithTarget:self selector:@selector(test2) object:nil];
24     //创建对象,封装操作
25     NSBlockOperation *operation3=[NSBlockOperation blockOperationWithBlock:^{
26         NSLog(@"NSBlockOperation3--1----%@",[NSThread currentThread]);
27     }];
28     [operation3 addExecutionBlock:^{
29         NSLog(@"NSBlockOperation3--2----%@",[NSThread currentThread]);
30     }];
31     
32     //创建NSOperationQueue
33     NSOperationQueue * queue=[[NSOperationQueue alloc]init];
34     //把操作添加到队列中
35     [queue addOperation:operation1];
36     [queue addOperation:operation2];
37     [queue addOperation:operation3];
38 }
39 
40 -(void)test1
41 {
42     NSLog(@"NSInvocationOperation--test1--%@",[NSThread currentThread]);
43 }
44 
45 -(void)test2
46 {
47     NSLog(@"NSInvocationOperation--test2--%@",[NSThread currentThread]);
48 }
49 
50 @end
复制代码

打印效果:

注意:系统自动将NSOperationqueue中的NSOperation对象取出,将其封装的操作放到一条新的线程中执行。上面的代码示例中,一共有四个任务,operation1和operation2分别有一个任务,operation3有两个任务。一共四个任务,开启了四条线程。通过任务执行的时间全部都是273可以看出,这些任务是并行执行的。

提示:队列的取出是有顺序的,与打印结果并不矛盾。这就好比,选手A,BC虽然起跑的顺序是先A,后B,然后C,但是到达终点的顺序却不一定是A,B在前,C在后。

下面使用for循环打印,可以更明显的看出任务是并发执行的。

代码示例:

复制代码
 1 #import "YYViewController.h"
 2 
 3 @interface YYViewController ()
 4 
 5 @end
 6 
 7 @implementation YYViewController
 8 
 9 - (void)viewDidLoad
10 {
11     [super viewDidLoad];
12 
13     //创建NSInvocationOperation对象,封装操作
14     NSInvocationOperation *operation1=[[NSInvocationOperation alloc]initWithTarget:self selector:@selector(test1) object:nil];
15     NSInvocationOperation *operation2=[[NSInvocationOperation alloc]initWithTarget:self selector:@selector(test2) object:nil];
16     //创建对象,封装操作
17     NSBlockOperation *operation3=[NSBlockOperation blockOperationWithBlock:^{
18         for (int i=0; i<5; i++) {
19             NSLog(@"NSBlockOperation3--1----%@",[NSThread currentThread]);
20         }
21     }];
22     [operation3 addExecutionBlock:^{
23         for (int i=0; i<5; i++) {
24         NSLog(@"NSBlockOperation3--2----%@",[NSThread currentThread]);
25         }
26     }];
27     
28     //创建NSOperationQueue
29     NSOperationQueue * queue=[[NSOperationQueue alloc]init];
30     //把操作添加到队列中
31     [queue addOperation:operation1];
32     [queue addOperation:operation2];
33     [queue addOperation:operation3];
34 }
35 
36 -(void)test1
37 {
38     for (int i=0; i<5; i++) {
39     NSLog(@"NSInvocationOperation--test1--%@",[NSThread currentThread]);
40     }
41 }
42 
43 -(void)test2
44 {
45     for (int i=0; i<5; i++) {
46     NSLog(@"NSInvocationOperation--test2--%@",[NSThread currentThread]);
47     }
48 }
49 
50 @end
复制代码

转载: https://www.cnblogs.com/wendingding/p/3809042.html
博途的HMI(触摸屏)的应用 触摸屏(HMI):用于控制PLC,可认为是小型上位机(用于控制PLC的都可认为是上位机)上位机(PC Station):将触摸屏升级为电脑----工控机(工业控制的机器)用博途编写西门子的触摸屏和上位机。 阅读详情

相关推荐

核磁干货 | RESTplus实战:静息态fMRI预处理全流程解析

本文详细解析了使用RESTplus工具包进行静息态fMRI数据预处理的完整流程,包括数据准备、环境配置、预处理步骤及高级分析技巧。RESTplus作为基于SPM的批处理工具,以其图形化界面和智能化参数设置显著提升了核磁静息态数据分析的效率,特别适合新手和临床研究人员。文章还分享了实战中的常见问题解决方案和性能优化技巧。

wine的专栏 880

NSOperation的进阶使用和简单探讨

NSOperation类是iOS2.0推出的,通过NSThread实现的,但是效率一般。从OS X10.6和iOS4推出GCD时,又重写了NSOperation和NSOperationQueue,NSOperation和NSOperationQueue分别对应GCD的任务和队列,所以NSOPeration和NSOperationQueue是基于GCD更高一层的封装,而且完全地面向对象。但是比GCD更简单易用、代码可读性也更高。

GJ_ia的博客 533

NRF52832串口通信避坑指南:从SDK配置到硬件流控(RTS/CTS)实战

本文详细介绍了NRF52832串口通信的实战指南,从SDK配置到硬件流控(RTS/CTS)的完整实现。通过分析UARTE模块特性、解决SDK版本差异问题、正确配置硬件引脚以及实现稳定通信的代码示例,帮助开发者避开常见陷阱,确保高效可靠的串口通信。特别强调了硬件流控在高速通信中的重要性及其实践方法。

weixin_33739646的博客 280

NSOperation(线程)

简介 NSOperation作用 NSOperation和NSOperationQueue也能实现多线程编程 NSOperation和NSOperationQueue实现多线程的具体步骤 先将需要执行的操作封装到一个NSOperation对象中 然后将NSOperation对象添加到NSOperationQueue中 将取出的NSOperation封装的操作放到一条新线程中执行 NSOpera...

weixin_44729579的博客 2829

Jmeter压测报告

账户分析压测报告 一、测试内容 本次测试是针对账户分析进行的压力测试,在账户分析查询接口中,只对用户资产查询接口进行压力测试,其中不包含用户签名校验功能。 二、测试方法 本次采用apache的开源测试工具jmeter,采用本地动态拼装请求数据并通过http协议GET方式发送每日盈亏查询请求。并采用1000个用户账号测试访问情况。...

qq_31108731的博客 6624

Cadence SKILL 语言实战指南:从函数列表到高效自动化脚本

本文是Cadence SKILL语言实战指南,旨在帮助芯片设计工程师从掌握核心函数列表出发,高效构建自动化脚本。文章详细解析了数据处理、数据库访问、流程控制及错误处理四类关键函数,并通过版图层批量修改与参数化单元生成两大实战场景,演示如何将函数组合成解决实际问题的自动化方案,从而显著提升Virtuoso环境下的工作效率。

beta5的博客 705

iOS多线程:『NSOperation、NSOperationQueue』详尽总结

本文用来介绍 iOS 多线程中 NSOperation、NSOperationQueue 的相关知识以及使用方法。通过本文,您将了解到:NSOperation、NSOperationQueue 简介、操作和操作队列、使用步骤和基本使用方法、控制串行/并发执行、NSOperation 操作依赖和优先级、线程间的通信、线程同步和线程安全,以及 NSOperation、NSOperationQueue ...

欢迎来到一度's博客 496

ETAP实战:如何用仿真软件快速绘制标准一次接线图(附模板下载)

本文提供了一套基于ETAP软件高效绘制标准一次接线图的完整实战工作流。从国标符号库配置、绘图模板创建,到核心设备绘制、参数标注,再到利用软件模型进行拓扑检查与短路电流校核,手把手教你实现从零到一的专业图纸设计。文末附有实用模板下载,助你大幅提升电力设计效率与图纸质量。

weixin_29291573的博客 510

「OC」多线程(三)——NSOperation

在写了知乎日报之前学习了相关的GCD和NSThread的相关内容,然后在知乎日报写完之后,我继续开始OC之中多线程的NSOperation的学习。由于之后肯定是要对和SDWebImage的源码继续相关学习,所以学习NSOperation的相关内容也是给后面做铺垫。NSOperation 是苹果公司对 GCD 的封装,完全面向对象,并比GCD多了一些更简单实用的功能,所以使用起来更加方便易于理解。NSOperation 和NSOperationQueue 分别对应 GCD 的 任务 和 队列。

aa2002aa的博客 1189

【即插即用模块】卷积篇 | TCSVT 2025 | MFACB:多尺度膨胀融合,快速扩大感受野,多尺度特征精准捕捉!

本文提出了一种新型多尺度融合膨胀卷积模块MFACB,用于增强语义分割任务中的特征表达能力。该模块通过三分支串联膨胀卷积结构快速扩大感受野,采用双路径融合机制(基础信息路径+多尺度信息路径)实现高效上下文聚合。相比传统卷积块,MFACB在保持轻量化的同时显著提升了多尺度特征捕捉能力,实验表明其性能优于基础残差块。该模块支持自定义膨胀率和步长调整,可灵活嵌入不同网络阶段,适用于需要特征增强的视觉任务。

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 310

Unity Hololens2开发|(一)环境配置

开发过程中预览和调试应用:可以在电脑上的 Unity 编辑器中以播放模式本地运行应用,并将体验流式传输到 HoloLens2。将来自 HoloLens2 的输入(视线、手势、语音和空间映射)发送到电脑,在其中内容以虚拟沉浸式视图渲染。在HoloLens2设备中,打开Settings面板,依次选择Update & Security > For Developers,打开“Developer Mode”。在开发计算机中打开控制面板,依次选择“更新和安全> 开发者选项”,打开“开发人员模式”;

游戏开发小Y的博客 14万+

多线程之NSOperation

与GCD一样,也是我们日常开发中经常用到的多线程技术。本文将会介绍的基本使用、添加依赖、自定义。

weixin_61196797的博客 529

2021.07.05【R语言】丨预测lncRNA并绘制venn图

目录摘要环境与方法依赖工具预测工具绘制工具使用命令预测lncRNA统计noncoding_ID绘制Venn图结果展示总结 摘要 接到一个单样品测lncRNA数据的项目,正好拿来练练手,梳理一下lncRNA流程。这里记录预测lncRNA并生成venn图的过程 环境与方法 R version 3.6.3 (2020-02-29) 依赖工具 预测工具 CPC2 CNCI Pfam CPAT 绘制工具 R:VennDiagram 使用命令 预测lncRNA CPC2 #更换env conda activate py

2035

iOS开发多线程篇 09 —NSOperation简单介绍

iOS开发多线程篇—NSOperation简单介绍 一、NSOperation简介 1.简单说明 NSOperation的作⽤:配合使用NSOperation和NSOperationQueue也能实现多线程编程 NSOperation和NSOperationQueue实现多线程的具体步骤: (1)先将需要执行的操作封装到一个NSOperation对象中 (...

aaa1231722的博客 142

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Wi-Fi与蓝牙同时用的芯片怎么选:ESP32并非唯一答案

在物联网硬件开发中,Wi-Fi和蓝牙是两种最常见的无线通信技术,分别承担高速数据传输与低功耗短距连接。理解两者的协议原理、工作频段以及共存机制,是选型的基础。许多工程师习惯将“支持Wi-Fi和蓝牙”直接等同于选择ESP32,但实际项目中还需考虑平均功耗、经典蓝牙是否必需、射频共存稳定性、天线布局及认证成本等因素。从智能家居到低功耗传感器,不同场景对无线方案的诉求差异巨大。树立正确的选型思维,有助于更科学地评估ESP32与nRF52等方案,从而做出适合产品生命周期的决策。

weixin_34163553的博客 389

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

上一篇: iOS开发多线程篇—多线程简单介绍
下一篇: NSOprationQueue 与 GCD 的区别与选用
lin_transform
博客等级 码龄9年 3粉丝 22原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值