您的位置:首页 > 产品设计 > UI/UE

NSOperation及子类、NSOperationQueue属性及方法

2017-04-03 14:35 465 查看
#define NSOperationQualityOfService NSQualityOfService
#define NSOperationQualityOfServiceUserInteractive NSQualityOfServiceUserInteractive
#define NSOperationQualityOfServiceUserInitiated NSQualityOfServiceUserInitiated
#define NSOperationQualityOfServiceUtility NSQualityOfServiceUtility
#define NSOperationQualityOfServiceBackground NSQualityOfServiceBackground

***NSOperation操作的属性及方法-NS_CLASS_AVAILABLE(10_5, 2_0)***
@interface NSOperation : NSObject

- (void)start;//开始执行操作
- (void)main;//实现要执行的操作,自定义NSOperation时,要被重写

@property (readonly, getter=isCancelled) BOOL cancelled;//是否取消该操作
- (void)cancel;//取消操作

@property (readonly, getter=isExecuting) BOOL executing;//是否正在执行
@property (readonly, getter=isFinished) BOOL finished;//是否执行完毕
@property (readonly, getter=isConcurrent) BOOL concurrent; // To be deprecated; use and override 'asynchronous' below//是否是并行执行的
@property (readonly, getter=isAsynchronous) BOOL asynchronous NS_AVAILABLE(10_8, 7_0);
@property (readonly, getter=isReady) BOOL ready;//是否就绪

- (void)addDependency:(NSOperation *)op;//添加依赖
- (void)removeDependency:(NSOperation *)op;//移除依赖

@property (readonly, copy) NSArray<NSOperation *> *dependencies;//查看所有依赖

typedef NS_ENUM(NSInteger, NSOperationQueuePriority) {
NSOperationQueuePriorityVeryLow = -8L,
NSOperationQueuePriorityLow = -4L,
NSOperationQueuePriorityNormal = 0,
NSOperationQueuePriorityHigh = 4,
NSOperationQueuePriorityVeryHigh = 8
};//NSOperationQueue的优先级
@property NSOperationQueuePriority queuePriority;//获取队列的优先级

@property (nullable, copy) void (^completionBlock)(void) NS_AVAILABLE(10_6, 4_0);

- (void)waitUntilFinished//来阻塞当前线程直到这个 operation 执行完成

@property double threadPriority NS_DEPRECATED(10_6, 10_10, 4_0, 8_0);

@property NSQualityOfService qualityOfService NS_AVAILABLE(10_10, 8_0);

@property (nullable, copy) NSString *name NS_AVAILABLE(10_10, 8_0);

***NSBlockOperation的相关属性及方法---NS_CLASS_AVAILABLE(10_6, 4_0)***
@interface NSBlockOperation : NSOperation

//使用blockOperationWithBlock:初始化
+ (instancetype)blockOperationWithBlock:(void (^)(void))block;

//使用addExcutionBlock追加操作块
(void)addExecutionBlock:(void (^)(void))block;

//查看NSBlockOperation上的操作块
@property (readonly, copy) NSArray<void (^)(void)> *executionBlocks;

***NSInvocationOperation-NS_CLASS_AVAILABLE(10_5, 2_0)NS_SWIFT_UNAVAILABLE***
@interface NSInvocationOperation : NSOperation

//初始化
- (nullable instancetype)initWithTarget:(id)target selector:(SEL)sel object:(nullable id)arg;
- (instancetype)initWithInvocation:(NSInvocation *)inv NS_DESIGNATED_INITIALIZER;

@property (readonly, retain) NSInvocation *invocation;

//可以获取invokOperation的selector的结果
@property (nullable, readonly, retain) id result;

static const NSInteger NSOperationQueueDefaultMaxConcurrentOperationCount = -1;

***NSOperationQueue -NS_CLASS_AVAILABLE(10_5, 2_0)***
@interface NSOperationQueue : NSObject
//添加操作
- (void)addOperation:(NSOperation *)op;
- (void)addOperations:(NSArray<NSOperation *> *)ops waitUntilFinished:(BOOL)wait NS_AVAILABLE(10_6, 4_0);
- (void)addOperationWithBlock:(void (^)(void))block NS_AVAILABLE(10_6, 4_0);

//查看OperationQueue上的操作数以及所有操作
@property (readonly, copy) NSArray<__kindof NSOperation *> *operations;
@property (readonly) NSUInteger operationCount NS_AVAILABLE(10_6, 4_0);

@property NSInteger maxConcurrentOperationCount;//设置队列上的最大并发数

@property (getter=isSuspended) BOOL suspended;//是否挂起该队列

@property (nullable, copy) NSString *name NS_AVAILABLE(10_6, 4_0);//队列的名字

@property NSQualityOfService qualityOfService NS_AVAILABLE(10_10, 8_0);

@property (nullable, assign /* actually retain */) dispatch_queue_t underlyingQueue

- (void)cancelAllOperations;//取消所有的操作
- (void)waitUntilAllOperationsAreFinished;//等待 operation queue 中的所有 operation 执行完成

@property (class, readonly, strong, nullable) NSOperationQueue *currentQueue
@property (class, readonly, strong) NSOperationQueue *mainQueue NS_AVAILABLE(10_6, 4_0);
//注意:再追加操作块时必须在巧用start前,即[blOp start];否则报错blocks cannot be added after the operation has started executing or finished'
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  class