多线程之 NSOperation 基础用法

429 查看

一、概念

NSOperation是一个多线程任务。NSOperation有NSInvocationOperation、NSBlockOperation两个子类。

NSOperationQueue负责管理多个NSOperation,它是个FIFO队列,会按顺序启动线程执行NSOperation任务。

二、用法

NSOperation实现多线程有两个方式,一个是直接使用NSInvocationOperation、NSBlockOperation两个子类,一个是自己实现NSOperation的子类。在平时的开发中掌握第一种的使用基本上能够应对大部分多线程需求。这里主要讲解第一种使用

一、直接使用NSInvocationOperation和NSBlockOperation

NSInvocationOperation 是通过方法实现的形式完成多线程任务。

NSInvocationOperation*invocationOperation = [[NSInvocationOperationalloc]initWithTarget:selfselector:@selector(invocationOperationAction)object:nil];

NSBlockOperation是通过代码块的形式完成多线程任务。

NSBlockOperation*blockOperation = [NSBlockOperationblockOperationWithBlock:^{

}];

执行任务有两个方式,一个是用start方法 一个是提交到NSOperationQueue, 用start 方法时与主线程同步,有阻塞主线程的情况,提交到NSOperationQueue中与主线程是异步,不会阻塞到主线程。

NSOperationQueue可以通过maxConcurrentOperationCount设置线程最大并行数量,为1的时候相当于串行,大于1时为并发。

Talk is Cheap,show you the code:

三、总结

1、有NSBlockOperation 和 NSInvocationOperation 两种方式实现多线程任务;

2、有两种方式执行任务 :一个是start方法,一个是提交到NSOperationQueue,前者是同步,后者是异步。

3、NSOperationQueue可以通过设置最大线程并发数量来决定串行或并发。