iOS菜鸟级开发iOS菜鸟食谱iOS 开发

多线程技术之NSOperation

2016-07-25  本文已影响26人  来金德瑞

NSOperation

配合使用NSOperationNSOperationQueue也能实现多线程编程。

具体步骤:

  1. 现将需要执行的操作封装到一个NSOperation对象中
  2. 将NSOperation对象添加到NSOperationQueue中
  3. 系统会将NSOperationQueue中的NSOperation取出来
  4. 将取出来的NSOperation封装的操作放到一条新线程中执行

NSOperation是一个抽象类,并不具备封装操作的能力,必须使用它的子类.使用NSOperation子类的方式有3种:

  1. 使用NSInvocationOperation
  2. 使用NSBlockOperation
  3. 自定义子类继承NSOperation,实现内部相应的方法。

NSInvocationOperation

- (nullable instancetype)initWithTarget:(id)target selector:(SEL)sel object:(nullable id)arg;
//一旦执行操作,就会调用target的sel方法
- (void)start;

NSBlockOperation

+ (instancetype)blockOperationWithBlock:(void (^)(void))block;

NSOperationQueue

- (void)addOperation:(NSOperation *)operation;
- (void)addOperationWithBlock:(void(^)(void)block);
- (NSIntegrt)maxConcurrentOperationCount;
- (void)setMaxConcurrentOperationCount:(NSInteger )cnt;
//操作B依赖操作A
[operationB addDependency:operationA];

//操作的监听,可以监听一个操作的执行完毕
-(void(^)(void))completionBlock;
-(void)setCompletionBlock:(void(^)(void))block;

NSOperationQueue的队列类型

自定义NSOperation

从子线程返回到主线程方法总结

  1. [self performSelectorOnMainThread:(SEL) withObject;(id) waitUntilDone:(BOOL)];
  2. dispatch_async(dispatch_get_main_queue(),^{});
  3. [NSOperation mainQueue]addOperationWithBlock:^{}];
上一篇 下一篇

猜你喜欢

热点阅读