首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏進无尽的文章

    多线程-NSOperation和NSOperationQueue

    # 获取到主队列 NSOperationQueue *queue = [NSOperationQueue mainQueue]; 其他创建的队列 主队列比较特殊,所以会单独有一个类方法来获得主队列 #1.创建一个其他队列 NSOperationQueue *queue = [[NSOperationQueue alloc] init]; #2.创建NSBlockOperation对象 NSBlockOperation 的一些特殊使用 设置最大并发数 我们将 NSOperationQueue 与 GCD的队列 相比较就会发现,这里没有串行队列,那如果我想要10个任务在其他线程串行的执行的话,NSOperationQueue 是基于GCD的OC版本封装 GCD只支持FIFO的队列,NSOperationQueue可以很方便地调整执行顺序、设置最大并发数量 NSOperationQueue可以在轻松在Operation间设置依赖关系 ) GCD的执行速度比NSOperationQueue快 **任务之间没有什么依赖关系,而是需要更高的并发能力:GCD ** 任务之间有依赖、或者要监听任务的执行情况、需要暂停、继续任务:NSOperationQueue

    1.4K30发布于 2018-09-12
  • 来自专栏iOS开发干货分享

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

    NSOperation、NSOperationQueue 简介 NSOperation、NSOperationQueue 是苹果提供给我们的一套多线程解决方案。 NSOperation、NSOperationQueue 使用步骤 NSOperation 需要配合 NSOperationQueue 来实现多线程。 创建队列:创建 NSOperationQueue 对象。 将操作加入到队列中:将 NSOperation 对象添加到 NSOperationQueue 对象中。 下边我们来讲讲 NSOperationQueue 的创建。 创建队列 NSOperationQueue 一共有两种队列:主队列、自定义队列。其中自定义队列同时包含了串行、并发功能。 需要配合 NSOperationQueue 来实现多线程。

    1.4K60发布于 2019-06-14
  • 来自专栏程序员充电站(itcharge)

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

    NSOperation、NSOperationQueue 简介 NSOperation、NSOperationQueue 是苹果提供给我们的一套多线程解决方案。 NSOperation、NSOperationQueue 使用步骤 NSOperation 需要配合 NSOperationQueue 来实现多线程。 创建队列:创建 NSOperationQueue 对象。 将操作加入到队列中:将 NSOperation 对象添加到 NSOperationQueue 对象中。 下边我们来讲讲 NSOperationQueue 的创建。 4.2 创建队列 NSOperationQueue 一共有两种队列:主队列、自定义队列。其中自定义队列同时包含了串行、并发功能。 需要配合 NSOperationQueue 来实现多线程。

    1.1K80发布于 2018-05-31
  • 来自专栏浮躁的喧嚣

    block与GCD--43:NSOperation 与NSOperationQueue

    NSOperation NSOperation、NSOperationQueue 是苹果提供给我们的一套多线程解决方案。 实际上 NSOperation、NSOperationQueue 是基于 GCD 更高一层的封装,完全面向对象。但是比 GCD 更简单易用、代码可读性也更高。 NSOperationQueue 一共有两种队列:主队列、自定义队列。 *queue = [[NSOperationQueue alloc]init]; //设置为1就成了串行队列 queue.maxConcurrentOperationCount 设置队列依赖 - (IBAction)createOperationQueueSetDependency:(id)sender { NSOperationQueue *queue = [[NSOperationQueue

    34910编辑于 2023-11-22
  • 来自专栏iOSer

    NSOperationQueue队列中操作依赖相关思考

    ViewController - (void)viewDidLoad { [super viewDidLoad]; [self testQueue]; } - (void)testQueue{ NSOperationQueue *lQ = [[NSOperationQueue alloc] init]; //任务最大并发数,与是否开启子线程无关。

    55210发布于 2020-09-04
  • 来自专栏一“技”之长

    iOS多线程编程之二——NSOperation与NSOperationQueue

    iOS多线程编程之二——NSOperation与NSOperationQueue 一、NSOperation解析 NSOperation是基于Object-C封装的一套管理与执行线程操作的类。 三、NSOperationQueue操作队列 NSOperationQueue是操作队列类,通过上面的介绍,我们已经可以理解操作,并且操作默认的执行方式是串行的,尽管NSBlockOperation中的 NSOperationQueue * queue = [[NSOperationQueue alloc]init];     NSInvocationOperation * op1 = [[NSInvocationOperation void)cancelAllOperations; 阻塞当前线程,直到队列中所有任务完成 - (void)waitUntilAllOperationsAreFinished; 获取当前执行的队列 + (NSOperationQueue  *)currentQueue; 获取主线程中的操作队列 + (NSOperationQueue *)mainQueue; 四、队列中操作的执行顺序法则 1、决定于依赖关系,只有当这个操作的依赖全部执行完成后

    46720发布于 2018-08-16
  • 来自专栏iOS 技术分享

    iOS - 多线程(四):NSOperation

    NSOperationQueue:队列 获取主队列:[NSOperationQueue mainQueue] 获取当前队列:[NSOperationQueue currentQueue] 1.4 创建队列:创建一个 NSOperationQueue 对象; ③ 添加操作到队列中:然后将 NSOperation 对象添加到 NSOperationQueue 队列中。 对象 NSOperationQueue *queue = [[NSOperationQueue alloc]init]; // 创建一个 NSInvocationOperation 对象 添加进队列 - (void)demo2 { NSOperationQueue *queue = [[NSOperationQueue alloc]init]; NSBlockOperation 示例:在不同队列的操作之间添加依赖(下载-解压-安装完成-通知用户) NSOperationQueue *queue = [[NSOperationQueue alloc]init];

    2K10发布于 2020-04-16
  • 来自专栏hrscy

    iOS 多线程 - NSOperation

    配合使用 NSOperation 和 NSOperationQueue 也能实现多线程编程。 NSOperation 和 NSOperationQueue 实现多线程的具体步骤 先将需要执行的操作封装到一个 NSOpertion 对象中 然后将 NSOperation 对象添加到 NSOperationQueue 的使用 NSOperationQueue的作用 NSOperationQueue 可以调用 start 方法来执行任务,但默认是同步执行 如果将 NSOperation 添加到 NSOperationQueue (操作队列)中,系统会自动异步执行 NSOperation 中的操作 添加操作到 NSOperationQueue 中 -(void)addOperation:(NSOperation *)op; -( 的队列类型 主队列 [NSOperationQueue mainQueue] 凡是添加到主队列中的任务(NSOperation),都会放到主线程中执行 非主队列(其他队列) [[NSOperationQueue

    58210发布于 2018-08-30
  • 来自专栏码客

    NSNotificationCenter.addObserverForName的正确打开方式

    nameObserver = NSNotificationCenter.defaultCenter().addObserverForName("Name", object: nil, queue: NSOperationQueue.mainQueue nameObserver = NSNotificationCenter.defaultCenter().addObserverForName("Name", object: nil, queue: NSOperationQueue.mainQueue nameObserver = NSNotificationCenter.defaultCenter().addObserverForName("Name", object: nil, queue: NSOperationQueue.mainQueue nameObserver = NSNotificationCenter.defaultCenter().addObserverForName("Name", object: nil, queue: NSOperationQueue.mainQueue

    1.4K10发布于 2019-10-22
  • 来自专栏iOS开发~

    iOS_多线程三:NSOperation的使用

    目录 一、NSInvocationOperation 二、NSBlockOperation 三、NSOperationQueue NSOperation 是一个抽象类,线程安全,不需要添加额外的锁 使用其子类 NSInvocationOperation 和 NSBlockOperation 1、NSInvocationOperation 一个对象,表示一个任务 默认在主线程中同步顺序执行,想要并行异步,需要搭配`NSOperationQueue 若想实现异步并发,需要结合 NSOperationQueue 使用: NSOperationQueue *queue = [[NSOperationQueue alloc] init]; // 设置最大并发数 完成3 block // 完成5 block // 完成4 block // 是否阻塞主线程 从执行结果可以看出来,任务一多,就不确定哪个任务会主线程中执行了,所以感觉还是用queue比较保险 三、NSOperationQueue NSOperationQueue 操作队列,管理Operation对象,根据Operation开辟适量的线程 NSOperationQueue *queue = [[NSOperationQueue

    68010编辑于 2022-07-20
  • 来自专栏ShaoYL

    iOS--多线程之NSOperation

    NSOperation 一、NSOperation简单介绍 1、NSOperation简介 ①.简单说明 NSOperation的作⽤:配合使用NSOperation和NSOperationQueue也能实现多线程编程 NSOperation和NSOperationQueue实现多线程的具体步骤: (1)先将需要执行的操作封装到一个NSOperation对象中 (2)然后将NSOperation对象添加到NSOperationQueue 中 (3)系统会⾃动将NSOperationQueue中的NSOperation取出来 (4)将取出的NSOperation封装的操作放到⼀条新线程中执⾏ ②.NSOperation的子类 NSOperationQueue的作⽤:NSOperation可以调⽤start⽅法来执⾏任务,但默认是同步执行的 如果将NSOperation添加到NSOperationQueue(操作队列 //创建NSOperationQueue // 自己创建的队列,就会在子线程中执行,而且默认是并发 NSOperationQueue * queue=[[NSOperationQueue

    1.1K140发布于 2018-05-11
  • 来自专栏iOSer

    多线程之NSOperation小结

    NSOperationQueue 队列 已经学习过的抽象类 UIGestureRecognizer CAAnimation CAPropertyAnimation 二、 NSOperation 和 GCD *lQueue = [[NSOperationQueue alloc] init]; 100 for (int i = 0; i < 20; ++i) { 101 [lQueue *lQueue = [[NSOperationQueue alloc] init]; 111 lQueue.maxConcurrentOperationCount = 2; 112 for *lQ = [[NSOperationQueue alloc] init]; 125 126 [lQ addOperationWithBlock:^{ 127 NSLog *lQ = [[NSOperationQueue alloc] init]; 195 196 NSLog(@"come in"); 197 NSBlockOperation

    63020发布于 2020-09-04
  • 来自专栏ShaoYL

    iOS--多线程之线程间通讯

    NSLog(@"更新UI完毕"); }); NSLog(@"Other"); }); 三、NSOperation 1.第一种方法 // 1.创建一个新的队列 NSOperationQueue *queue = [[NSOperationQueue alloc] init]; // 2.添加任务(操作) [queue addOperationWithBlock:^{ image; }]; }]; 2.第二种方法(添加依赖) / 1.创建一个队列 // 一般情况下, 在做企业开发时候, 都会定义一个全局的自定义队列, 便于使用 NSOperationQueue *queue = [[NSOperationQueue alloc] init]; // 2.添加一个操作下载第一张图片 __block UIImage *image1 = nil; UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); // 5.回到主线程更新UI [[NSOperationQueue

    1.2K80发布于 2018-05-11
  • 来自专栏服务端技术杂谈

    推荐:多线程的实现方式及经典示例

    队列 将任务 NSOperation 对象 add 到 NSOperationQueue 队列中去 NSInvocationOperation 代码如下: NSInvocationOperation 使用NSOperationQueue创建队列:主队列和全局队列 // 创建一个其他队列(包括串行队列和并发队列) 放到这个队列中的NSOperation对象会自动放到子线程中执行 NSOperationQueue *queue = [[NSOperationQueue alloc] init]; // 创建一个主队列,放到这个队列中的NSOperation对象会自动放到子线程中执行 NSOperationQueue *mainQueue = [NSOperationQueue mainQueue]; // 表示并发数量:即同时执行任务的最大数。 *queue = [[NSOperationQueue alloc] init]; // 下载图片1 __block UIImage *image1 = nil; NSBlockOperation

    1.4K160发布于 2018-04-16
  • 来自专栏DannyHoo的专栏

    NSOperation的简单使用代码

    代码: NSOperationQueue * queue = [[NSOperationQueue alloc] init]; NSBlockOperation * o1 = [NSBlockOperation queue addOperationWithBlock:^{ NSLog(@"子线程%@", [NSThread currentThread]); // 回到主线程         [[NSOperationQueue

    65110发布于 2018-09-13
  • 来自专栏TechBox

    浅析iOS多线程编程之NSOperation

    只有将NSInvocationOperation实例对象添加到一个NSOperationQueue中,才会异步执行操作。 *queue = [[NSOperationQueue alloc] init]; [queue addOperation:customOperation]; // 输出结果: NSOperation *queue = [[NSOperationQueue alloc] init]; [queue addOperation:op2]; // 取消op2 *queue = [[NSOperationQueue alloc] init]; [queue addOperation:blkop]; // 输出结果: 2017-02-09 20:00 *queue = [[NSOperationQueue alloc] init]; [queue addOperation:blkop]; blkop.completionBlock

    8.4K50发布于 2018-06-05
  • 来自专栏mukekeheart的iOS之旅

    iOS学习——(转)多线程

    创建队列:创建NSOperationQueue。 3. 将任务加入到队列中:将NSOperation对象添加到NSOperationQueue中。 这是因为NSOperation多线程的使用需要配合队列NSOperationQueue,后面会讲到NSOperationQueue的使用。 所以,NSOperation是需要配合队列NSOperationQueue来实现多线程的。下面就来说一下队列NSOperationQueue。   NSOperationQueue只有两种队列:主队列、其他队列。 NSOperationQueue *queue = [[NSOperationQueue alloc] init]; 注意: 非主队列(其他队列)可以实现串行或并行。

    1.5K20发布于 2018-08-01
  • 来自专栏iOS技术杂谈

    iOS多线程——你要知道的NSOperation都在这里你要知道的iOS多线程NSThread、GCD、NSOperation、RunLoop都在这里

    这一面向对象的多线程类,这两个类与GCD提供的功能类似,NSOperation提供任务的封装,NSOperationQueue顾名思义,提供执行队列,可以自动实现多核并行计算,自动管理线程的生命周期,如果是并发的情况 NSOperation “任务的封装” 和GCD类似,GCD向队列提交任务,NSOperation就是对任务进行的封装,封装好的任务交给不同的NSOperationQueue即可进行串行队列的执行或并发队列的执行 NSOperationQueue NSOperationQueue就是任务的执行队列,看一下该类中有哪些比较重要的属性和方法: //向队列中添加一个任务 - (void)addOperation:(NSOperation 自定义NSOperation子类 经过前文的讲解,关于NSOperation和NSOperationQueue的基础使用已经有了一个初步的掌握,如果我们去阅读AFNetworking或SDWebImage ; } @end - (void)viewWillAppear:(BOOL)animated { NSOperationQueue *queue = [[NSOperationQueue alloc

    1.9K51发布于 2018-04-10
  • 来自专栏清墨_iOS分享

    iOS-GCD信号量实现最大并发

    1.实现最大并发数,在iOS里,最容易使用的是NSOperationQueue,如下 NSOperationQueue *queue = [[NSOperationQueue alloc]init]; queue.maxConcurrentOperationCount = 2; NSOperationQueue中,已经考虑到了最大并发数的问题,并提供了maxConcurrentOperationCount

    2.3K10发布于 2019-10-28
  • 来自专栏c#开发者

    IOS5开发-http get/post调用mvc4 webapi互操作(图片上传)

    NSUTF8StringEncoding]);     NSMutableURLRequest *request=[NSMutableURLRequest requestWithURL:url];     NSOperationQueue  *queue=[[NSOperationQueue alloc] init];     [NSURLConnection sendAsynchronousRequest:request queue:queue  *queue=[[NSOperationQueue alloc] init];     [NSURLConnection sendAsynchronousRequest:request queue:queue \r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];          [request setHTTPBody:body];     NSOperationQueue  *queue=[[NSOperationQueue alloc] init];     [NSURLConnection sendAsynchronousRequest:request queue:queue

    1.4K50发布于 2018-04-12
领券