NSOperation及其子类简单介绍和使用
来源:互联网 发布:tk免费域名注册网站 编辑:程序博客网 时间:2024/04/29 05:19
NSOperation基于GCD,NSOperation是iOS2的时候出来的,GCD在iOS4的时候出来的.iOS4的时候NSOperation重写了 新增了NSBlockOperation.NSOperation是抽象类不能直接使用,要使用的话,就使用它的子类
a.NSInvocationOperation b.NSBlockOperation c.自定义NSOperation.
NSOperation 可以手动开启
调用对象方法
- (void)start;
如果是加入到队列中的操作 就不能再调用start方法 会导致系统崩溃
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSOperationQueue addOperations:waitUntilFinished:]: 1 (of 3) operation is finished, executing, or already in a queue, and cannot be enqueued'
监听操作完成
//当前操作完成时调用的block
@property(nullable,copy)void (^completionBlock)(void)NS_AVAILABLE(10_6, 4_0);
操作依赖
// 添加依赖 a addDependency:b a要等到b执行完之后再执行
//注意点:不要添加循环依赖 会造成卡死
// 可以在同一个队列中的操作添加依赖 也可以在不同的队列中的操作添加依赖
- (void)addDependency:(NSOperation*)op;
//移除依赖
- (void)removeDependency:(NSOperation*)op;
1.队列 (NSOperationQueue)(除了主队列)本质是一个并发队列
属性:
//队列中的所有操作
@property(readonly,copy)NSArray<__kindofNSOperation*> *operations;
//队列中操作个数
@property(readonly)NSUIntegeroperationCount NS_AVAILABLE(10_6, 4_0);
//队列的最大并发数即 当前队列中同时执行的操作的最大数量 (如果设置为0,那么该队列就是一个串行队列)
@propertyNSIntegermaxConcurrentOperationCount;
//赋值为true 还没有执行的操作暂停执行 false继续未执行的操作
@property(getter=isSuspended)BOOL suspended;
//队列名字
//队列名字
@property(nullable,copy)NSString*name NS_AVAILABLE(10_6, 4_0);
//服务质量 即 队列优先级
NSQualityOfServiceUserInteractive = 0x21,
NSQualityOfServiceUserInitiated = 0x19,
NSQualityOfServiceUtility = 0x11,
NSQualityOfServiceBackground = 0x09,
NSQualityOfServiceDefault = -1
@propertyNSQualityOfServicequalityOfService NS_AVAILABLE(10_10, 8_0);
使用[[NSOperationQueuealloc]init] 创建一个队列对象
类方法
//可以获得主队列
+ (NSOperationQueue*)mainQueue NS_AVAILABLE(10_6, 4_0);
对象方法
//添加一个操作到队列中
- (void)addOperation:(NSOperation*)op;
//添加多个操作到队列中 waitUntilFinished : 是否等待所有操作完成在执行之后的代码
- (void)addOperations:(NSArray<NSOperation*> *)ops waitUntilFinished:(BOOL)waitNS_AVAILABLE(10_6, 4_0);
//添加block操作
//添加block操作
- (void)addOperationWithBlock:(void(^)(void))blockNS_AVAILABLE(10_6, 4_0);
1.NSInvocationOperation
使用方法类似于NSThread
- (nullableinstancetype)initWithTarget:(id)target selector:(SEL)sel object:(nullableid)arg;
2.NSBlockOperation
//类方法 创建一个block操作
+ (instancetype)blockOperationWithBlock:(void(^)(void))block;
//执行块:可以给一个操作添加多个要做的事情 异步操作
- (void)addExecutionBlock:(void(^)(void))block;
@property(readonly,copy)NSArray<void(^)(void)> *executionBlocks;
3.自定义操作
创建一个继承自NSOperation的类 实现方法:
- (void)main;
操作本质上被添加到队列中,本质就是执行main 这个方法不是程序员主动去触发
0 0
- NSOperation及其子类简单介绍和使用
- NSOperation的介绍和使用
- NSOperation使用介绍
- NSOperation的简单使用
- NSOperation 简单使用
- NSOperation 简单使用
- iOS开发—使用NSOperation子类操作
- 黑马程序员———集合及其collection接口及其子类的简单介绍
- 认识和使用NSOperation
- 认识和使用NSOperation
- NSOperation的简单使用代码
- GreenDao的简单使用及其介绍
- app常见功能模块及其使用简单介绍
- Apache MINA简单介绍及其使用
- iOS开发多线程-NSOperation简单介绍
- android基础-ProgressBar及其子类和ViewAnimator及其子类
- Android之AdapterView及其子类的介绍
- ViewAnimator类及其子类的介绍
- 前端技能之切图
- Python之简单的SMTP发送邮件详细教程附代码
- 用CSDN Markdown在线编辑器写博客
- C语言 作业四 函数专题
- ThreadLocal的使用
- NSOperation及其子类简单介绍和使用
- 微信摇一摇-----加速度传感器的使用
- C#学习5
- int [] is an instance of Object
- Zookeeper应用 - Master选举
- PAT乙级(Basic Level)1009(Java)
- HDU 5578 Friendship of Frog 暴力搜索
- springmvc+mybatis框架学习总结
- HDU 4417 Super Mario