多线程之NSOperation

GCD与NSOperation的区别:

1.GCD是底层C语言构成的API

  NSOperation及其对象时ObjectiveC对象

  在GCD中执行队列中执行的是由block构成的任务,这是个轻量级的数据结构

  而NSOperation作为一个对象,为我们提供了更多的选择

2.在NSOperationQueue中的任务可以随时取消,GCD也可以但是需要大量复杂代码

3.NSOperation能方便设置依赖关系

4.NSOperation能应用KVO,监听任务是否完成,比GCD更有效管理后台任务

5.NSOperation可以在同一个队列中设置任务的优先级,GCD只能设置不同队列的优先级,如果要区分block任务的优先级需要大量复杂代码

6.对NSOperation类继承可以添加成员变量和成员方法


NSOperation本身是抽象基类,因此必须使用它的子类,子类有三种

1.NSInvocationOperation

2.NSBlockOperation

3.自定义

NSOperation对象的isConcurrent方法会告诉我们这个操作相对于调用start方法的线程,是同步还是异步执行。isConcurrent方法默认返回NO,表示操作与调用线程同步执行

如果我们想在一个NSOperation执行完毕后做一些事情,就调用NSOperation的setCompletionBlock方法来设置想做的事情

NSInvocationOperation:

[[NSInvocation alloc]initWith...];

[..  start];  //没有添加到NSOperationQueue就是在主线程中


NSBlockOperation:

[[NSBlockOperation blockOperationWithBlock:...]

[.. addExcutionBlock:..] //添加更多任务,即使没有放在NSOperationQueue中,当任务>1的时候,自动增加线程

[.. start]


队列:

[[NSOperationQueue alloc]init]

[.. addOperation:..] //自动执行,不用调用start了,自动开启线程

设置最大并发数: maxCurrentOperationCount

队列取消:cancelAllOperation

单个取消:-(void)cancel

暂停:setSuspened:(BOOL)

优先级: .priority

依赖:  [A addDependency:B] 表示B先执行再执行A

监听: .completionBlock


自定义NSOperation

重写- (void)main方法,在里面实现想执行的任务

重写- (void)main方法的注意点

自己创建自动释放池(因为如果是异步操作,无法访问主线程的自动释放池)

经常通过- (BOOL)isCancelled方法检测操作是否被取消,对取消做出响应


资源下载链接为: https://pan.quark.cn/s/1bfadf00ae14 华为移动服务(Huawei Mobile Services,简称 HMS)是一个全面开放的移动服务生态系统,为企业和开发者提供了丰富的工具和 API,助力他们构建、运营和推广应用。其中,HMS Scankit 是华为推出的一款扫描服务 SDK,支持快速集成到安卓应用中,能够提供高效且稳定的二维码和条形码扫描功能,适用于商品扫码、支付验证、信息获取等多种场景。 集成 HMS Scankit SDK 主要包括以下步骤:首先,在项目的 build.gradle 文件中添加 HMS Core 库和 Scankit 依赖;其次,在 AndroidManifest.xml 文件中添加相机访问和互联网访问权限;然后,在应用程序的 onCreate 方法中调用 HmsClient 进行初始化;接着,可以选择自定义扫描界面或使用 Scankit 提供的默认扫描界面;最后,实现 ScanCallback 接口以处理扫描成功和失败的回调。 HMS Scankit 内部集成了开源的 Zxing(Zebra Crossing)库,这是一个功能强大的条码和二维码处理库,提供了解码、生成、解析等多种功能,既可以单独使用,也可以与其他扫描框架结合使用。在 HMS Scankit 中,Zxing 经过优化,以更好地适应华为设备,从而提升扫描性能。 通常,ScanKitDemoGuide 包含了集成 HMS Scankit 的示例代码,涵盖扫描界面的布局、扫描操作的启动和停止以及扫描结果的处理等内容。开发者可以参考这些代码,快速掌握在自己的应用中实现扫码功能的方法。例如,启动扫描的方法如下: 处理扫描结果的回调如下: HMS Scankit 支持所有安卓手机,但在华为设备上能够提供最佳性能和体验,因为它针对华为硬件进行了
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值