NSOperation 简单使用

Spring Boot + Vue 前后端分离库存管理系统:从源码跑通到业务改造实践 前后端分离架构已成为现代 Web 开发的标配,Spring Boot 与 Vue 的组合更是 Java 技术栈中最常见的搭配之一。对于库存管理系统这类典型业务场景,理解商品管理、出入库记录、库存扣减等核心数据流转,是掌握企业级开发的基础。本文以降本增效的视角,从环境搭建出发,详细讲解数据库初始化、后端接口配置与前端代理等关键步骤,并深入分析登录拦截器、事务处理及表结构设计。通过一个可直接运行的库存管理源码案例,演示如何使用 Spring Boot 提供 REST 接口、Vue 构建管理页面,最终实现一个轻量 阅读详情

NSOperation 是一种多线程技术 ,起基本原理是把相应地操作放在队列里边 ,然后有队列分发处理。

队列的创建

/**
 *  初始化一个队列
 *
 *  @return 初始化好的对列
 */
- (NSOperationQueue *)myQueue {
    if (_myQueue == nil)
    {
        _myQueue = [[NSOperationQueue alloc] init];
    }
    return _myQueue;
    
}
向队列中添加操作

#pragma mark - 同时并发线程数量
/**
 *  在队列中添加操作
 */
- (void)opDemo1
{
    
    // 线程开启的数量是由GCD底层来决定的,程序员不能参与
    // Mac 10.10 + Xcode 6.0.1 GCD & NSOperation => 能建立 60~70 个线程
    /**
     设置最大并发数的好处,线程开启有消耗
     3G     :   2~3条线程就可以了,线程少,流量少,省钱,省电
     WIFI   :   5~6条线程就可以了,线程多,效率高,流量大,不花钱,可以随时充电!
     */
    // NSOperation提供过了一个属性->最大并发线程数量
    self.myQueue.maxConcurrentOperationCount = 3;
    for (int i = 0; i < 100; i++)
    {
        [self.myQueue addOperationWithBlock:^{
            // 阻塞自己的操作
            [NSThread sleepForTimeInterval:0.5];
            NSLog(@"%@ %d", [NSThread currentThread], i);
        }];
    }
}

队列可以暂停和继续

- (IBAction)pause {
    
    // 先判断队列中是否有操作
    
    if (self.myQueue.operationCount == 0) {
        
        NSLog(@"无操作");
        
        return;
        
    }
    // 挂起-》暂停,暂停的是队列,让队列暂时不再派发任务
    NSLog(@"暂停");
    [self.myQueue setSuspended:YES];
}

- (IBAction)resumue
{
    // 先判断队列中是否有操作
    if (self.myQueue.operationCount == 0)
    {
        NSLog(@"无操作");
        return;
    }
    NSLog(@"继续");
    [self.myQueue setSuspended:NO];
    
}

队列里边的操作默认是异步的

但是可以添加依赖关系 ,从而实现顺序执行的需求

/**
 *  NSInvocationOperation 测试样例
 */
- (void)opDemo4
{
    NSInvocationOperation *invocationOperation1 = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(demo4Test1) object:nil];
    NSInvocationOperation *invocationOperation2 = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(demo4Test2) object:nil];
    NSInvocationOperation *invocationOperation3 = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(demo4Test3) object:nil];
    NSInvocationOperation *invocationOperation4 = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(demo4Test4) object:nil];
    /**
     *  添加依赖关系
     */
    [invocationOperation2 addDependency:invocationOperation1];
    [invocationOperation3 addDependency:invocationOperation2];
    [invocationOperation4 addDependency:invocationOperation3];
    [self.myQueue addOperations:@[invocationOperation1, invocationOperation2, invocationOperation3,invocationOperation4] waitUntilFinished:NO];
    
}
- (void)demo4Test1
{
    NSLog(@"test1  %@",[NSThread currentThread]);
}
- (void)demo4Test2
{
    NSLog(@"test2  %@",[NSThread currentThread]);
}
- (void)demo4Test3
{
    NSLog(@"test3  %@",[NSThread currentThread]);
}
- (void)demo4Test4
{
    NSLog(@"test4  %@",[NSThread currentThread]);
}
#pragma mark - 操作的依赖->操作的执行顺序
/**
 *  NSBlockOperation 测试阳历
 */
- (void)opDemo3
{
    
    /**
     测试的操作
     例如:
     1. 下载小电影压缩包
     2. 解压缩
     3. 保存文件
     4. 通知用户
     */
    NSBlockOperation *op1 = [NSBlockOperation blockOperationWithBlock:^{
        
        NSLog(@"下载 %@", [NSThread currentThread]);
        
    }];
    NSBlockOperation *op2 = [NSBlockOperation blockOperationWithBlock:^{
        
        NSLog(@"解压缩 %@", [NSThread currentThread]);
        
    }];
    
    NSBlockOperation *op3 = [NSBlockOperation blockOperationWithBlock:^{
        NSLog(@"保存 %@", [NSThread currentThread]);
    }];
    NSBlockOperation *op4 = [NSBlockOperation blockOperationWithBlock:^{
        NSLog(@"通知用户 %@", [NSThread currentThread]);
        
    }];
    // Dependency依赖
    [op2 addDependency:op1];
    [op3 addDependency:op2];
    [op4 addDependency:op3];
    // 一定注意不要出现循环依赖,
    //    [op1 addDependency:op4];
    // waitUntilFinished等待所有操作完成再继续
    //    [self performSelectorOnMainThread:<#(SEL)#> withObject:<#(id)#> waitUntilDone:<#(BOOL)#>]
    
    [self.myQueue addOperations:@[op1, op2, op3] waitUntilFinished:NO];
    
    [[NSOperationQueue mainQueue] addOperation:op4];
}


锐捷交换机堆叠配置举例 一、组网需求: 1)四台S2628G进行堆叠; 2)设备在堆叠前先设置好优先级; 3)使用光口堆叠的设备如RG-S2928G-E相关配置 二、组网拓扑 三、配置要点: 普通堆叠设备不需要配置,只要把堆叠模块和线缆连接好即可 堆叠模块不支持热插拔,即插在模块连上线缆后不能立即生效,需要重启设备才生效。 如果拔掉堆叠插槽后,想再插上模块堆叠,那么必须重启设备才生效 设备堆叠需要协商参数,时间会比较久,请耐心等待 堆叠时设备建议是... 阅读详情

相关推荐

Windows 10/11 注册表 ProfileImagePath 误改修复:3步恢复用户登录与数据安全

本文详细介绍了Windows 10/11系统中因误改注册表ProfileImagePath键值导致用户无法登录的修复方法。通过3个关键步骤,包括定位SID、安全修复注册表项及验证处理,帮助用户恢复登录并保障数据安全。特别强调了操作顺序的重要性以避免数据丢失,适用于各类Windows用户账户登录错误的紧急处理。

chuoshao2508的博客 403

多线程(三) NSOperation,NSOperationqueue

/*------------------------------  NSOperation使用 1.简介  -----------------------------------*/ 重点:理解操作 NSOperation 和操作队列 NSOperationQueue! 操作队列 NSOperationQueue :1> 决定操作在哪条线程执行 2>管理操作(暂停/恢复 取消) 3>

M_SR_的博客 512

Synopsys AXI VIP 从环境搭建到首个验证场景运行

本文详细介绍了Synopsys AXI VIP从环境搭建到首个验证场景运行的全过程,包括VIP安装、示例工程生成、验证环境解析、仿真调试技巧及进阶优化。特别针对AXI协议验证中的常见问题提供了实用解决方案,帮助工程师快速掌握这一SoC验证必备工具。

weixin_29185493的博客 342

IOS开发之——多线程-NSOperation(9)

一 概述 NSOperation中的几个概念 NSOperation示例 二 NSOperation中的几个概念 2.1 NSOperation说明 NSOperation的作用 配合使用NSOperation和NSOperationQueue也能实现多线程编程 NSOperation和NSOperationQueue实现多线程的具体步骤 先将需要执行的操作封装到一个NSOperation对象中 然后将NSOperation对象添加到NSOperationQueue中 系统会自动将NSOperati

我的博客 723

组合导航-IMU-GPS-RTK基本介绍

在实际应用中,需要利用 GPS、北斗等方式产生的信号进行初始化,结合惯导信号和卫星导航信号进行进行卡尔曼滤波处理,得出其最佳推算的定位信息。惯导比起卫星定位具有自身的技术优势,测量方法不依赖外界,短期精度高,能稳 定高频地输出信号。工作原理是通过感知物体在空间的角速度、线速度,进而获取物体的姿态、位置和速度等信息,实现对运动物体姿态和运动轨迹的测量,可以实现全天候全地点地工作。但惯导也有自身的缺陷,由于采用积分算法,定位误差随 载体运行不断累积。

NCU_wander的博客 8016

反激系列-详细到每个容阻的原理之RCD吸收(1)

1、漏感尖峰电压会被RCD吸收,漏感能量一定,电容越大,电容充电的电压就越低,吸收能力就越强,MOS漏极的电压就越低。2、在漏感能力释放完之后(这个过程一般只有一个周期的3%时间),是要通过R1释放掉电容吸收的能量的,把电容的电压降下来方便下一次漏感尖峰来之前再进行吸收。3、电容容量和电阻需要合理搭配,容量足够即可,足够能吸收漏感尖峰电压,不至于超过MOS耐压。电阻需要足够小,小到在放电阶段把电容电压下降到MOS的电压平台。

Cuxiaoweiba的博客 3万+

[iOS]NSOperation的start与main,并发与非并发。

NSOperation有一个属性,isConcurrent. Operation queues usually provide the threads used to run their operations. In OS X v10.6 and later, operation queues use the libdispatch library (also known as Grand Ce

wcxdell的专栏 5324

RK3588上使用PCIE接口的国产千兆网卡YT6801

YT6801是裕太微电子开发的一款国产千兆PCIE以太网控制器芯片,可作为RK3588的PCIE外扩网口使用。

荻夜的博客 8214

nsoperation封装_NSOperation简单介绍/NSOperation基本操作/自定义NSOperation

NSOperation基本操作一、并发数(1)并发数:同时执⾏行的任务数.比如,同时开3个线程执行3个任务,并发数就是3(2)最大并发数:同一时间最多只能执行的任务的个数。(3)最⼤大并发数的相关⽅方法- (NSInteger)maxConcurrentOperationCount;- (void)setMaxConcurrentOperationCount:(NSInteger)cnt;说明:如...

weixin_35653679的博客 606

21天学会基于 Linux 的 NPU 固件开发--12.3 如何参与 Linux 内核 NPU 子系统开发

从修复一个简单的文档拼写错误开始,或者为现有的开源 NPU 驱动(如 Sophgo, StarFive, Etinix 等厂商已上游化的驱动)添加一个缺失的 IOCTL 支持或优化一个算子,都是伟大的第一步。在 2026 年的 Linux Kernel (v6.12+) 中,NPU 驱动不再是孤立的字符设备,而是深度集成在 DRM 和 DMA-BUF 生态中,实现了与 GPU 类似的资源管理和调度能力。内核驱动必须提供清晰的 UAPI (User API),通常定义在。Step 4: 合并 (Merge)

amy_mhd的博客 67

Modbus RTU 详解 + FreeMODBUS移植(附项目源码)

本文全面解析Modbus RTU通信协议,详细介绍其报文格式、功能码定义及典型应用场景,并手把手指导如何将FreeMODBUS协议栈移植到嵌入式平台。内容涵盖从底层硬件驱动配置、协议栈移植到主机/从机通信测试的全流程,重点讲解移植过程中的常见问题及解决方案。文章最后提供经过实测的完整项目源码,帮助开发者快速实现稳定的Modbus RTU通信功能。

Bit_Dong的博客 2926

多线程之NSOperation的简单使用

和多线程相关的基础知识,总共只有四个:pthread、NSThread、GCD和NSOperation。在前面,我们已经整理完了3个,现在就剩下NSOperation这一个了,下面,我们就继续学习这最后一个。 一、NSOpertion的基本使用     NSOperation是一个抽象类,它本身并不具备封装操作的能力,必须使用它的子类。这一点和我们之前学过的UIGestureRecognizer类

Enrica_Shi的博客 625

RH850从0搭建Autosar开发环境【2】- Davinci Configurator配置工程导入DBC与CDD文件

Davinci Configurator配置工程导入DBC与CDD文件,开始Autosar开发

weixin_42412049的博客 8153

NSOperation的进阶使用和简单探讨

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

GJ_ia的博客 533

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

NSOperation的简单使用

继承NSOperation并且在.m文件中实现main方法(d)

xiaoji94shen的专栏 501

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

【iOS开发】NSOperation简单介绍

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

aewak462262的博客 91

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

NSOperation及其子类简单介绍和使用

NSOperation基于GCD,NSOperation是iOS2的时候出来的,GCD在iOS4的时候出来的.iOS4的时候NSOperation重写了 新增了NSBlockOperation. NSOperation是抽象类不能直接使用,要使用的话,就使用它的子类 a.NSInvocationOperation b.NSBlockOperation c.自定义NSOperation.

WUJIANZX000的博客 501

NSOperation简单使用01

NSOperation(操作) 是一个抽象类 不能直接使用; NSOperation 有两个直接子类;NSInvocationOperation(调用)和NSBlockOperation(代码块) NSOperation是对GCD的进一步封装,相比于GCD而言,GCD使用方便,适用于简单的线程操作,不能控制 NSOperation是可以控制的各个操作之间有依赖关系,...

weixin_33806914的博客 108

NSOperation简单用法汇总

优秀的blog集合。

skwaityou的专栏 414

NSOperation的简单使用代码

注意点:需要将operation对象添加到队列中。代码: NSOperationQueue * queue = [[NSOperationQueue alloc] init];          NSBlockOperation * o1 = [NSBlockOperation blockOperationWithBlock:^{         NSLog(@

梁森的博客 657

iOS—NSOperation、NSOperationQueue简单了解

文章目录NSOperation、NSOperationQueue为什么要使用NSOperation、NSOperationQueueNSOperation、NSOperationQueue操作和操作队列NSOperation、NSOperationQueue使用步骤NSOperation、NSOperation基本使用创建操作使用子类NSInvocationOperation使用子类NSBlockOperation NSOperation、NSOperationQueue NSOperation、NSOpe

qq_45836906的博客 1072

NSOperation简单讲解

前段时间,由于公司的业务调整和整体搬迁,无奈之下我选择了离职。离职前帮公司招聘一个负责维护的iOS,问了几个前来应聘的,问到多线程这块,很多人支支吾吾说不清楚,于是自己随意写个小Demo,给大家做个借鉴。 #import "ViewController.h" @interface ViewController () @property(nonatomic,st

銟麯的博客 287

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

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

weixin_34308389的博客 186
上一篇: 判断字符串是否由数字和字母组成
下一篇: NSThread 售票员售票问题
杨小兵
博客等级 码龄14年 11粉丝 52原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值