iOS多线程之NSOperation和NSOperationQueue的使用
2023-09-11 14:15:06 时间
一:NSOperation 两个子类+重写main方法
- NSInvocationOperation
- NSBlockOperation 有个类方法 BlockOprationWith:
- 还有就是自己个子类重写main方法,把任务写在main方法里面
二:NSOperationQueue 线程管理器
- 类方法 mainQueue
- 类方法 currentQueue
- alloc init 新Queue
三:使用代码:(ARC环境)
#pragma mark NSOperationQueue - (void)doBtnFoure { //一:主线程测试; //NSOperationQueue *mainQueue = [NSOperationQueue mainQueue]; //主线种之中添加任务;卡UI //测试一; // [mainQueue addOperationWithBlock:^{ // [self doOperation:@"NSOperationQueue MainQueue"]; // }]; //测试2; // [mainQueue addOperation:[NSBlockOperation blockOperationWithBlock:^{ // [self doOperation:@"MainQueue add BlockOperation"]; // }]]; //二:创建Quene,其他线程处理;不卡UI; 默认并行,异步执行; NSOperationQueue *myQueue = [[NSOperationQueue alloc]init]; myQueue.maxConcurrentOperationCount = 2; //设置并行操作线程的最大个数; [myQueue addOperationWithBlock:^{ [self doOperation:@"MyQueue "]; }]; [myQueue addOperation:[NSBlockOperation blockOperationWithBlock:^{ [self doOperation:@"MyQueue NSBlockOperation"]; }]]; NSInvocationOperation *invoOp = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(doOperation:) object:@"MyQueue NSInvocationOp"]; [myQueue addOperation:invoOp]; } #pragma mark 自定的 MyOperation - (void)doBtnThree { // 串行执行任务,卡UI 在 当前线程执行; MyOperation *myOperation = [[MyOperation alloc]init]; [myOperation start]; MyOperation *op2 = [[MyOperation alloc]init]; [op2 start]; } #pragma mark 只有将operation放到一个NSOperationQueue中,才会异步执行操作 // - (void)doBtnTwo { //卡UI,在当前线程之中执行;同步,串行执行多个NSBlockOp,并行执行NSOp里面的 ExecuBlock; //每个ExecuBlock都是一个新的线程; NSBlockOperation *blockOp = [[NSBlockOperation alloc]init]; [blockOp addExecutionBlock:^{ [self doOperation:@"NSBlockOperation1 1111"]; }]; [blockOp addExecutionBlock:^{ [self doOperation:@"NSBlockOperation1 2222"]; }]; [blockOp start]; /* 线程执行完的操作; blockOp.completionBlock = ^(){ NSLog(@"执行完成"); }; */ NSBlockOperation *blockOp2 = [[NSBlockOperation alloc]init]; [blockOp2 addExecutionBlock:^{ [self doOperation:@"NSBlockOperation2 1111"]; }]; [blockOp2 addExecutionBlock:^{ [self doOperation:@"NSBlockOperation2 2222"]; }]; [blockOp2 start]; } - (void)doBtnOne { //在当前线程中执行,卡UI ;同步,串行; NSInvocationOperation *oper1 = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(doOperation:) object:@"NSINvocationOperation 111"]; NSInvocationOperation *oper2 = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(doOperation:) object:@"NSINvocationOperation 222"]; [oper1 start]; [oper2 start]; } //任务测试 - (void)doOperation:(NSString *)aStr { for (int i = 0; i < 5000; i ++) { NSLog(@"%@ --> %d",aStr,i); } }
相关文章
- iOS 多线程技术2
- iOS中UIWebView的缓存处理
- iOS中UIBezierPath详解
- iOS枚举器enumerateObjectsUsingBlock和enumerateKeysAndObjectsUsingBlock
- ASP.NET MVC Filters 4种默认过滤器的使用【附示例】 数据库常见死锁原因及处理 .NET源码中的链表 多线程下C#如何保证线程安全? .net实现支付宝在线支付 彻头彻尾理解单例模式与多线程 App.Config详解及读写操作 判断客户端是iOS还是Android,判断是不是在微信浏览器打开
- iOS 多线程
- ios多线程操作(四)—— GCD核心概念
- 【AGC】iOS平台ipa包的dsym文件上传失败解决方法
- 《iOS 8开发指南》——第6章,第6.5节实战演练——使用模板Single View Application
- 《iOS 6高级开发手册(第4版)》——1.5节处理基本的方向
- 正确使用iOS常量(const)、enum以及宏(#define)
- iOS——多线程编程详细解析
- Hello_IOS ios开发transform属性
- iOS开发UI篇—ios应用数据存储方式(归档)
- Visual Studio Code现在支持iOS Web应用调试了
- SwiftUI iOS 精品工具条组件之 04 仿简书指示器滚动工具条(教程含源码)
- ios GUI系统综述:iOS的图形绘制、动画与runloop
- iOS多线程编程技术之NSThread、Cocoa NSOperation、GCD
- iOS 静态库制作(Xcode9.0 版本)(注:亲测.a静态文件放在Unity Plugins/IOS 也可用)
- IOS开发之显示微博表情
- weex-platform里iOS项目打包报错/platforms/ios/../../start does not exist.
- iOS开发 - 类似美团选商品页,从按钮上往上滑动,tableview依然响应,点击按钮,按钮也可响应
- 关于第三方IOS的checkBox框架的使用