一、并发数
(1)并发数:同时执⾏行的任务数.比如,同时开3个线程执行3个任务,并发数就是3
(2)最大并发数:同一时间最多只能执行的任务的个数。
(3)最⼤大并发数的相关⽅方法
- (NSInteger)maxConcurrentOperationCount;
- (void)setMaxConcurrentOperationCount:(NSInteger)cnt; 
说明:如果没有设置最大并发数,那么并发的个数是由系统内存和CPU决定的,可能内存多久开多一点,内存少就开少一点。
注意:num的值并不代表线程的个数,仅仅代表线程的ID。
提示:最大并发数不要乱写(5以内),不要开太多,一般以2~3为宜,因为虽然任务是在子线程进行处理的,但是cpu处理这些过多的子线程可能会影响UI,让UI变卡。
 
二、队列的取消,暂停和恢复

(1)取消队列的所有操作

- (void)cancelAllOperations;

提⽰:也可以调用NSOperation的- (void)cancel⽅法取消单个操作

(2)暂停和恢复队列

- (void)setSuspended:(BOOL)b; // YES代表暂停队列,NO代表恢复队列

- (BOOL)isSuspended; //当前状态

(3)暂停和恢复的适用场合:在tableview界面,开线程下载远程的网络界面,对UI会有影响,使用户体验变差。那么这种情况,就可以设置在用户操作UI(如滚动屏幕)的时候,暂停队列(不是取消队列),停止滚动的时候,恢复队列。
 
三、操作优先级

(1)设置NSOperation在queue中的优先级,可以改变操作的执⾏优先级

- (NSOperationQueuePriority)queuePriority;
- (void)setQueuePriority:(NSOperationQueuePriority)p;

(2)优先级的取值

NSOperationQueuePriorityVeryLow = -8L,

NSOperationQueuePriorityLow = -4L,

NSOperationQueuePriorityNormal = 0,

NSOperationQueuePriorityHigh = 4,

NSOperationQueuePriorityVeryHigh = 8

说明:优先级高的任务,调用的几率会更大。

四、操作依赖

(1)NSOperation之间可以设置依赖来保证执行顺序,⽐如一定要让操作A执行完后,才能执行操作B,可以像下面这么写

[operationB addDependency:operationA]; // 操作B依赖于操作

(2)可以在不同queue的NSOperation之间创建依赖关系

- (void)viewDidLoad {
[super viewDidLoad];
/***********************************************************/
NSInvocationOperation *operation1=[[NSInvocationOperation alloc]initWithTarget:self selector:@selector(test1) object:self]; NSInvocationOperation *operation2=[[NSInvocationOperation alloc]initWithTarget:self selector:@selector(test2) object:nil]; NSBlockOperation *operation3=[NSBlockOperation blockOperationWithBlock:^{
for(int i=;i<;i++){
NSLog(@"NSBlockOperation--1--%@",[NSThread currentThread]);
}
}]; [operation3 addExecutionBlock:^{
for (int i=; i<; i++) {
NSLog(@"NSBlockOperation--2--%@",[NSThread currentThread]);
}
}]; //设置操作依赖
//先执行operation2,再执行operation1,最后执行operation3
[operation3 addDependency:operation1];
[operation1 addDependency:operation2]; //不能是相互依赖
// [operation3 addDependency:operation1];
// [operation1 addDependency:operation3];
NSOperationQueue *queue=[[NSOperationQueue alloc]init];
[queue addOperation:operation1];
[queue addOperation:operation2];
[queue addOperation:operation3];
/*****************************监听**************************/
//创建对象,封装操作
NSBlockOperation *operation=[NSBlockOperation blockOperationWithBlock:^{
for (int i=; i<; i++) {
NSLog(@"-operation-下载图片-%@",[NSThread currentThread]);
}
}]; //监听操作的执行完毕
operation.completionBlock=^{
//.....下载图片后继续进行的操作
NSLog(@"--接着下载第二张图片--");
}; //创建队列
NSOperationQueue *queue1=[[NSOperationQueue alloc]init];
//把任务添加到队列中(自动执行,自动开线程)
[queue1 addOperation:operation];
/***********************************************************/
}
-(void)test1{
NSLog(@"NSInvocationOperation-test1-%@",[NSThread currentThread]);
}
-(void)test2{
NSLog(@"NSInvocationOperation-test2-%@",[NSThread currentThread]); }

线程10--NSOperation的基本操作的更多相关文章

  1. laravel基础课程---10、数据库基本操作(如何使用数据库)

    laravel基础课程---10.数据库基本操作(如何使用数据库) 一.总结 一句话总结: 1.链接数据库:.env环境配置里面 2.执行数据库操作:DB::table('users')->up ...

  2. iOS开发多线程篇 10 —NSOperation基本操作

    iOS开发多线程篇—NSOperation基本操作 一.并发数 (1)并发数:同时执⾏行的任务数.比如,同时开3个线程执行3个任务,并发数就是3 (2)最大并发数:同一时间最多只能执行的任务的个数. ...

  3. NSThread 子线程 Cocoa NSOperation GCD(Grand Central Dispatch) 多线程

    单词:thread 英 θred:n 线.思路.vt 穿过.vi 穿透过 一.    进程.线程 进程:正在进行中的程序被称为进程,负责程序运行的内存分配,每一个进程都有自己独立的虚拟内存空间 线程: ...

  4. 创建线程方式-NSOperation

    *:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...

  5. 线程2 NSOperation 抽像类的使用

    // // ZYOperationViewController.h // Thread // // Created by yejiong on 14 // // ZYOperation.h // Th ...

  6. iOS多线程编程之NSOperation的基本操作(转载)

    一.NSOperation简介 1.简单说明 NSOperation的作⽤:配合使用NSOperation和NSOperationQueue也能实现多线程编程 NSOperation和NSOperat ...

  7. IOS-多线程(NSOperation)

    一.基础用法 // // ViewController.m // IOS_0120_NSOperation // // Created by ma c on 16/1/20. // Copyright ...

  8. jedis使用线程池封装redis基本操作

    redisclient jedis 经常使用的 操作 key value hash list set zset 的基本操作 package cn.zto.util; import java.util. ...

  9. [Swift通天遁地]四、网络和线程-(10)处理图片:压缩、缩放、圆角、CoreImage滤镜、缓存

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...

  10. 3.多线程NSOperation

    1.NSOperation的基本操作 使用NSOperation的两个子类,NSInvocationOperation 和 NSBlockOperation 创建操作,然后将操作添加到队列中去执行 / ...

随机推荐

  1. 【新题】ocp 062 2019年考试新题-3

    3.A database is open read write and the instance has multiple sessions some of which have active tra ...

  2. docker 运行容器,安装Nginx

    ########################################## #运行容器 #安装Nginx #搜索.下载镜像 docker search nginx docker pull n ...

  3. shell while-ssh

    Linux shell脚本使用while循环执行ssh的注意事项 浏览:86次 出处信息 如果要使用ssh批量登录到其它系统上操作时,我们会采用循环的方式去处理,那么这里存在一个巨大坑,你必须要小心了 ...

  4. android应用程序的混淆打包

    android应用程序的混淆打包 1 . 在工程文件project.properties中加入下proguard.config=proguard.cfg , 如下所示: target=android- ...

  5. .Net - WebApi

    WebApi C#进阶系列 - WebApi: WebApi 服务监控 + log4net:

  6. 指定nginx某个目录显示目录结构

    1.修改配置文件/usr/local/nginx/conf/nginx.conf 指定目录,开启autoindex为on. location /study { autoindex on; } 2. 保 ...

  7. day 34 js 基础后部分 BOM 和 事件和正则

    前情提要 今天主要学习的是bom 和事件 一:正则表达式 <!DOCTYPE html> <html lang="en"> <head> < ...

  8. 目标检测算法—YOLO-V1

    为什么会叫YOLO呢? YOLO:you only look once.只需要看一眼,就可以检测识别出目标,主要是突出这个算法 快 的特点.(原文:Yolo系列之前的文章:主要是rcnn系列的,他们的 ...

  9. POJ 2346

    #include<iostream> #include<stdio.h> using namespace std; ,,,,}; int main() { int num; c ...

  10. Mac下的paths.d目录神奇用法

    首先,这个方法是通过PG的做法学到的,且这个方法只能在Mac下用,在Linux下还真没有这个方法. 这个paths.d的作用很简单,就是在里面创建一个文件,然后写上需要在全局命令行下用到的命令,直接配 ...