请记住,人们可能会选择在其设备上禁用生物识别身份验证,因此您的应用程序应该准备好处理这种情况。 ? ? 现在人们用单一的方式认证。当人们不必选择如何进行身份验证时,这是最直观的。...只要给他们一个单一的选项,如Face ID。提供替代方案,例如要求用户名和密码,只有在初始方法失败时才作为备用。 仅在响应用户操作时启动身份验证。明确的操作,例如点击按钮,确保用户想要进行身份验证。...如果您实施特定于应用程序的设置,用户可能会进入生物认证认证在您的应用程序中被启用的状态,但在全系统范围内确实已被禁用。 ? 不要使用自定义图标来识别系统身份验证功能。...// LAErrorUserCancel = kLAErrorUserCancel, // // 已取消身份验证,因为用户已单击后退按钮(输入密码)。...本方法以弃用 // LAErrorTouchIDLockout NS_ENUM_DEPRECATED(10_11, 10_13, 9_0, 11_0, "use LAErrorBiometryLockout
通过本文,您将了解到: NSOperation、NSOperationQueue 简介、操作和操作队列、使用步骤和基本使用方法、控制串行/并发执行、NSOperation 操作依赖和优先级、线程间的通信...NSOperation、NSOperationQueue 操作和操作队列 既然是基于 GCD 的更高一层的封装。...NSOperation 和 NSOperationQueue 基本使用 4.1 创建操作 NSOperation 是个抽象类,不能用来封装操作。我们只有使用它的子类来封装操作。...NSOperationQueue 控制串行执行、并发执行 之前我们说过,NSOperationQueue 创建的自定义队列同时具有串行、并发功能,上边我们演示了并发功能,那么他的串行功能是如何实现的?...注意: 这里的暂停和取消(包括操作的取消和队列的取消)并不代表可以将当前的操作立即取消,而是当当前的操作执行完毕之后不再执行新的操作。
默认情况下,NSOperation并不具备封装操作的能力,NSOperation是一个基类,要想封装操作,必须使用它的子类。...在以下情况可能需要判断操作是否已经取消: main方法的开头。因为取消可能发生在任何时候,甚至在operation执行之前。 执行了一段比较耗时的操作后。因为执行耗时操作期间有可能取消了该操作。...我们可以调用cancel方法取消未执行的操作。但是已执行或者正在执行的操作不可取消。 即便操作已经被添加到操作队列中也可以取消,只要操作没有开始被执行。...其实,操作的依赖特性可以用GCD的信号量机制来实现。...因为只有队列中的操作被执行完成后,这个operationCount值才会改变,所以operationCount值包括当前正在执行的operation和还没有被执行的操、operation。
通过本文,您将了解到: NSOperation、NSOperationQueue 简介、操作和操作队列、使用步骤和基本使用方法、控制串行/并发执行、NSOperation 操作依赖和优先级、线程间的通信...NSOperation、NSOperationQueue 操作和操作队列 既然是基于 GCD 的更高一层的封装。...NSOperation 和 NSOperationQueue 基本使用 创建操作 NSOperation 是个抽象类,不能用来封装操作。我们只有使用它的子类来封装操作。我们有三种方式来封装操作。...NSOperationQueue 控制串行执行、并发执行 之前我们说过,NSOperationQueue 创建的自定义队列同时具有串行、并发功能,上边我们演示了并发功能,那么他的串行功能是如何实现的?...注意: 这里的暂停和取消(包括操作的取消和队列的取消)并不代表可以将当前的操作立即取消,而是当当前的操作执行完毕之后不再执行新的操作。
目录 一、NSInvocationOperation 二、NSBlockOperation 三、NSOperationQueue NSOperation 是一个抽象类,线程安全,不需要添加额外的锁 使用其子类...operation isExecuting]; // 是否正在执行中 [operation isFinished]; // 是否执行完毕 [operation isCancelled]; // 是否已取消...[operation isAsynchronous]; // 是否异步执行 [operation isConcurrent]; // 已废弃,用`isAsynchronous` NSOperationQueuePriority...比较保险 三、NSOperationQueue NSOperationQueue 操作队列,管理Operation对象,根据Operation开辟适量的线程 NSOperationQueue *queue...= [[NSOperationQueue alloc] init]; // 设置最大并发数: 1:同步 >=2:异步 默认:-1(无穷大) // 注意:设置的是队列里面最多能并发运行的操作任务个数,
和NSOperationQueue这一面向对象的多线程类,这两个类与GCD提供的功能类似,NSOperation提供任务的封装,NSOperationQueue顾名思义,提供执行队列,可以自动实现多核并行计算...接下来将分别介绍两个类的使用。...=isCancelled) BOOL cancelled; /* 设置cancelled属性为YES 仅仅标记cancelled属性,不退出任务,和NSThread的cancel一个机制 自定义子类时需要使用该属性判断是否在外部触发了取消任务的操作...finished设置为YES后,队列会将任务移除出队列 */ @property (readonly, getter=isFinished) BOOL finished; //是否为并发任务,该属性已经被标识即将弃用...,这两个子类已经帮我们完成了各种属性的设置操作,我们只需要编写一个任务的block或者一个方法即可像使用GCD一样方便的编写多线程程序。
NSOperation来创建自己的类来执行操作。...1、NSBlockOperation:使用这个类来用一个或多个block初始化操作,操作本身可以包含多个块。当所有block被执行操作将被视为完成。...2、NSInvocationOperation:使用这个类来初始化一个操作,它包括指定对象的调用selector。 ?...如果operation直接终止, 可能无法回收所有已分配的内存或资源。...为了让自定义的operation能够支持取消事件,NSOperation对象需要定期地调用isCancelled方法检测操作是否已经被取消,如果返回YES(表示已取消),则立即退出执行。
blockOperationWithBlock:^{ NSLog(@"-2--%@",[NSThread currentThread]); }]; //自定义(需要继承NSOperation,执行的操作需要放在这个自定义类的...blockOperationWithBlock:^{ NSLog(@"-2--%@",[NSThread currentThread]); }]; //自定义队列(需要继承NSOperation,执行的操作需要放在这个自定义类的...用来控制一个特定队列中可以有多少个操作同时参与并发执行 这里 maxConcurrentOperationCount 控制的不是并发线程的数量,而是一个队列中同时能并发执行的最大操作数。...设置队列挂起与取消 当队列调用了队列挂起的方法( self.queue.suspended = YES),队列里的执行方法立即停止,但是有一点需要注意的是,当block操作中,队列挂起是不起作用的,它是无法停止的...,只有在其isFinished状态为YES的时候,依赖其的操作任务才能开始执行,操作队列也是根据这个状态来决定是否将操作任务从队列中移除 isCancelled 代表任务已经取消执行 isAsynchronous
NSOperation子类以及如何使用NSURLSession实现下载的,本文将会讲解SDWebImageDownloader类,来探索SDWebImage如何实现多线程下载多张图片的。.../* 自定义token类,用于取消下载任务 这个token第二个属性其实就是SDWebImageDownloaderOperation中使用的token即回调块的字典 目的相同,都是为了取消特定的下载任务...挂起 - (void)setSuspended:(BOOL)suspended; //设置取消NSOperationQueue队列中的所有下载任务 - (void)cancelAllDownloads...//NSOperationQueue取消所有的下载操作 [self.downloadQueue cancelAllOperations]; //释放GCD队列 SDDispatchQueueRelease...来创建一个执行服务器交互数据的NSURLSessionDataTask的下载任务,并由其全权负责下载工作,接着使用NSOperationQueue实现多线程的多图片下载。
在iOS5之前,iPhone支持的传感器有限,关于加速度传感器的管理用UIAccelerometer这个类负责,iOS5之后,有关设备空间信息的管理交由了CoreMotion这个框架,CoreMotion...二、使用UIAccelerometer获取设备空间位置 虽然在iOS5之后这个类被弃用了,但是和其他大多被弃用的方法类似,在新的iOS版本中,是兼容旧方法的,我们依然可以使用这个类来获取简单的设备空间信息...我们主要使用到的类和代理方法如下: //设备信息对象类 @interface UIAcceleration : NSObject //加速度传感器的时间戳 @property(nonatomic,readonly...加速度传感器获取的属性是设备在三维空间的角度属性,借用下面这张图: ? 如果将设备这样立在桌面上,设备的三维坐标器如图,我们将设备已Z轴移动的时候,向右x为正,向左为负,其他两轴类似。...几个主要的类如下: CMAccelerommterData:设备的加速度数据 typedef struct { double x; double y; double z; } CMAcceleration
一、NSOperation 抽象类 NSOperation 是一个"抽象类",不能直接使用。抽象类的用处是定义子类共有的属性和方法。 NSOperation 是基于 GCD 做的面向对象的封装。...相比较 GCD 使用更加简单,并且提供了一些用 GCD 不是很好实现的功能。 苹果公司推荐使用的并发技术。...NSOperationQueue 队列 已经学习过的抽象类 UIGestureRecognizer CAAnimation CAPropertyAnimation 二、 NSOperation 和 GCD...可以跨队列设置操作的依赖关系 可以设置队列中每一个操作的优先级 高级功能: 最大操作并发数(GCD不好做) 继续/暂停/全部取消 跨队列设置操作的依赖关系 四、代码实践 1 // 2 // ViewController.m...80 不会取消正在执行中的操作。
NSOperation和NSOperationQueue实现多线程的具体步骤 1.将需要执行的操作封装到一个NSOperation对象中 2.将NSOperation对象添加到NSOperationQueue...是个抽象类,并不具备封装操作的能力,必须使用它的子类 使用NSOperation子类的方式有3种 NSInvocationOperation /* 第一个参数:目标对象 第二个参数...如果将NSOperation添加到NSOperationQueue(操作队列)中,系统会自动异步执行NSOperation中的操作 添加操作到NSOperationQueue中 - (void)...不再执行,不可逆 [queue cancelAllOperations]; 注意:暂停和取消只能暂停或取消处于等待状态的任务,不能暂停或取消正在执行中的任务,必须等正在执行的任务执行完毕之后才会暂停,如果想要暂停或者取消正在执行的任务...,可以在每个任务之间即每当执行完一段耗时操作之后,判断是否任务是否被取消或者暂停。
NSOperation 初识 1.1 NSOperation 介绍 NSOperation 是 OC 语言中基于 GCD 的面向对象的封装; 提供了一些用 GCD 不好实现的功能; 线程的生命周期由系统自动管理...: ① 最大并发数 ② 队列的暂停/继续/取消操作 ③ 指定操作之间的依赖关系(GCD 中可以使用同步实现) 1.3 NSOperation 与 NSOperationQueue NSOperation...NSOperation:操作 NSOperation 类是一个抽象类,不能直接使用它来封装任务,而是使用系统定义的子类( NSInvocationOperation 或 NSBlockOperation.../继续/取消操作 /* NSOperationQueue */ // YES:暂停 / NO:继续(当前正在执行的操作会执行完毕,暂停后续的所有操作) @property (getter=isSuspended...) BOOL suspended; // 取消队列中的所有操作(当前正在执行的操作会执行完毕,取消后续的所有操作) - (void)cancelAllOperations; /* NSOperation
线程同步对数据的加锁会有一定的系统开销 二、Cocoa Operations 优点:不需要关心线程管理,数据同步的问题,可以把精力放在自己需要执行的操作上 三、GCD 优点: GCD基于C的API,非常底层...---- 2、什么时候用GCD 什么时候用NSOperation 什么时候用NSThread 个人理解: 当你想直接操控线程对象,并且手动管理线程的生命周期时,使用NSThred 当你使用多核操作系统,...并且想让代码更高效的运行,自动管理线程的生命周期,只需要告诉它执行什么任务的时候,使用GCD 当你想使用一些在GCD中不容易复制的特性,更容易地添加任务的依赖关系使用NSOperation,并且可以很方便地取消一个...一定是一个类方法 一定有返回值 返回值类型 (id, instancetype) 便利构造器:+号方法 和自定义初始化方法的区别 自定义初始化方法(init) 初始化+赋值 遍历构造器: 开辟空间+...初始化+赋值 Block block是OC中的闭包形式 block来源:C语言 已经被弃用的一个观点:goto 解决block的循环引用:用__weak来修饰 如何修改block内的变量:__block
已取消返回零,否则非零。...操作依赖 dependencies 当需要以特定顺序执行 NSOperation 时,依赖 是一个方便的选择。...3.2 NSOperationQueue NSOperationQueue ,基于优先级与就绪状态执行 NSOperation 的操作队列。...添加到自定义队列的 NSOperation,默认放到子线程并发执行。 向 NSOperationQueue 添加操作 存在多种方法可以向 NSOperationQueue 添加操作。...取消操作 -cancelAllOperations 调用 -cancelAllOperations 可以直接取消队列中的所有操作。就是所有操作。。。
NSOperation表示一个单独的计算单元,它是一个抽象类(很类似Java里的Runnable接口),给子类提供了一些非常有用且线程安全的特性,比如状态(state),优先级(priority),依赖...NSOperationQueue控制各个operation的并发执行.它像是一个优先级队列,operation大致的会按FIFO的方式被执行,不过带有高优先级的会跳到低优先级前面被执行(用NSOperation...现在来看看NSOperation的几个不同的特性,以及如何如果使用和子类化它: 状态 State NSOperation构建了一个非常优雅的状态机来描述一个operation的执行过程: isReady...为了构造一致的状态,下面每个属性都与其他属性相互排斥: isReady: 如果operation已经做好了执行的准备返回YES,如果它所依赖的操作存在一些未完成的初始化步骤则返回NO。...取消 Cancellation 如果正在进行的operation所做的工作不再有意义,尽早的取消掉是非常有必要的。
权限管理分为两类一种是不涉及用于隐私的权限,用户不能取消该类权限的授权;另外一种是涉及用于隐私的权限,需要进行用户弹框授权,同一权限组的一个权限被授权,该组内的其他权限也会自动被授权。...请改用 Notification.Builder 类来构建通知。 音频管理器变更 不再支持通过 AudioManager 类直接设置音量或将特定音频流静音。...setStreamSolo() 方法已弃用,您应该改为调用 requestAudioFocus() 方法。...类似地,setStreamMute() 方法也已弃用,请改为调用 adjustStreamVolume() 方法并传入方向值 ADJUST_MUTE 或 ADJUST_UNMUTE。...App Standby模式 允许系统在用户没有继续操作app的情况下,决定哪一个app是处于空闲状态。系统会通过监听用户在一段时间内,是否没有再操作app,来判定某一个app是否是处于空闲状态。
类也遵守了该协议,该类继承自NSOperation主要是为了将任务加进并发队列里实现多线程下载多张图片,真正实现下载操作的是NSURLSessionTask类的子类,这里就可以看出SDWebImage使用...//重写NSOperation类的start方法,任务添加到NSOperationQueue后会执行该方法,启动下载任务 - (void)start { /* 同步代码块,防止产生竞争条件...start方法,当NSOperation类的子类添加进NSOperationQueue队列中线程调度后就会执行上述方法,上面这个方法也比较简单,主要就是判断session是否可用然后决定是否要自行管理一个...,该类继承自NSOperation,实现了相关的自定义操作,所以上层类在使用时就可以很轻松的用NSOperationQueue来实现多线程下载多张图片,该类逻辑也很简单,在加入到NSOperationQueue...,并在子线程中处理,就不会影响主线程的相关操作。
:快捷 方法1的优点:可以轻松拿到线程 线程间通信 线程间通信的体现 1个线程传递数据给另1个线程 在1个线程中执行完特定任务后,转到另1个线程继续执行任务 线程间通信的常用方法:小程序图片下载 - (...同步函数和异步函数,并发队列和串行队列 用同步的方式执行任务:在当前线程中可立即执行任务,不具备开启线程的能力 用异步的方式执行任务:在当前线程结束时执行任务,具备开启新的线程的能力 并发队列:允许多个任务同时执行...,使用起来也更方便, NSOperation实现多线程 NSOperation是个抽象类,并不具备封装操作的能力,必须使用它的子类 NSInvocationOperation NSBlockOperation...,而是在当前线程同步执行操作,只有将 NSOperation 放到一个 NSOperationQueue 中,才会异步执行操作 NSBlockOperation NSBlockOperation *op...queue.maxConcurrentOperationCount = 1; 队列的取消、暂停、恢复: // NSOpertion的 - cancel 方法也可以停止单个操作 - (void)cancelAllOperations
相关方法被完全的弃用,iOS系统有向下兼容的特性,尽管NSURLConnection已经被弃用,但在开发中,其方法依然可以被使用,并且如果需要兼容到很低版本的iOS系统,有时就必须使用NSURLConnection...类了。...三、使用NSURLConnection进行异步请求 使用同步的方式进行请求有一个很大的弊端,在进行网络请求时,数据的返回往往需要一定时间,不可能瞬间完成,使用同步的方式将导致界面卡死,没有提示也不能交互任何用户操作...NSURLConnection类提供两种方式进行异步请求操作。 ...参数决定block中的代码在哪个队列中执行 [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue
领取专属 10元无门槛券
手把手带您无忧上云