NSOperation及其子类简单介绍和使用

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 < __kindof NSOperation *> *operations;
//队列中操作个数
@property ( readonly ) NSUInteger operationCount NS_AVAILABLE (10_6, 4_0);
//队列的最大并发数即 当前队列中同时执行的操作的最大数量  (如果设置为0,那么该队列就是一个串行队列) 
@property NSInteger maxConcurrentOperationCount;
//赋值为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
@property NSQualityOfService qualityOfService NS_AVAILABLE (10_10, 8_0);

使用[[ NSOperationQueue alloc ] init ] 创建一个队列对象
类方法
//可以获得主队列
+ ( NSOperationQueue *)mainQueue NS_AVAILABLE (10_6, 4_0);
对象方法
//添加一个操作到队列中
- ( void )addOperation:( NSOperation *)op;
//添加多个操作到队列中   waitUntilFinished : 是否等待所有操作完成在执行之后的代码
- ( void )addOperations:( NSArray < NSOperation *> *)ops waitUntilFinished:( BOOL )wait NS_AVAILABLE (10_6, 4_0);
//添加block操作
- (void)addOperationWithBlock:(void (^)(void))block NS_AVAILABLE(10_6, 4_0);



1.NSInvocationOperation 
     使用方法类似于NSThread
  - ( nullable instancetype )initWithTarget:( id )target selector:( SEL )sel object:( nullable id )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 这个方法不是程序员主动去触发

你可能感兴趣的:(NSOperation及其子类简单介绍和使用)