iOS 多线程基础 六、NSOperation

2018-03-29  本文已影响13人  PPFSaber

常用的方法和属性
//开始执行任务,可以不把NSOperation添加到队列直接执行任务的
-(void)start;

//子类用来重写的方法,方法里面可以写上要进行的操作
-(void)main;

//是否已经取消
@property (readonly, getter=isCancelled) BOOL cancelled;

//取消任务
-(void)cancel;

//是否正在执行
@property (readonly, getter=isExecuting) BOOL executing;

//是否已经完成
@property (readonly, getter=isFinished) BOOL finished;

//添加对其他任务的依赖
-(void)addDependency:(NSOperation *)op;

//移除对其他任务的依赖
-(void)removeDependency:(NSOperation *)op;

//线程优先级
@property NSOperationQueuePriority queuePriority;

//任务完成之后 调用的block
@property (nullable, copy) void (^completionBlock)(void);

//当前线程是否等待直到任务执行完毕
-(void)waitUntilFinished;

//任务名字
@property (nullable, copy) NSString *name

并发数
同时执行的任务数
比如,同时开3个线程执行3个任务,并发数就是3,可以通过读 取和设置下边的属性来获取和更改并发数

@property NSInteger maxConcurrentOperationCount;

//取消队列的所有操作 也可以调用NSOperation 中的cancel操作
-(void)cancelAllOperations;

//当前线程是否等待所有操作完成
-(void)waitUntilAllOperationsAreFinished;

//暂停(挂起)和恢复队列 可以直接通过设置下边的属性来进行
@property (getter=isSuspended) BOOL suspended;

依赖
NSOperation 之间可以添加依赖关系,来保证周欢行顺序。

//添加对其他任务的依赖
-(void)addDependency:(NSOperation *)op;

//移除对其他任务的依赖
-(void)removeDependency:(NSOperation *)op;

[operationB addDependency:operationA];
表示只有A执行完之后B才能执行

 [operationC addDependency:operationA];
 [operationC addDependency:operationB];
 表示只有A和B都执行完之后C才能执行

注意:不能互相依赖,比如A依赖B且B依赖A,否则会锁死队列。

操作结束监听
NSOperation可以直接设置completionBlock来监听任务完成
@property (nullable, copy) void (^completionBlock)(void)

上一篇 下一篇

猜你喜欢

热点阅读