首页 > 代码库 > iOS多线程系列(二)------NSOperation和NSOperationQueue

iOS多线程系列(二)------NSOperation和NSOperationQueue

NSOperation 是抽象类,对它的使用可以直接使用系统提供的两个子类:NSInvocationOperation、NSBlockOperation,也可以自己写个类,继承NSOperation。

 

NSOperation有2种形式:并发的、非并发的

(1) 并发执行

       并发执行你需要重载如下4个方法    

       - (void)start                      //执行任务主函数,线程运行的入口函数 

       - (BOOL)isConcurrent          //是否允许并发,返回YES,允许并发,返回NO不允许。默认返回NO 

       - (BOOL)isExecuting            

       - (BOOL)isFinished             //是否已经完成,这个必须要重载,不然放在放在NSOperationQueue里的NSOpertaion不能正常释放   

      比如TestNSOperation:NSOperaion 重载上述的4个方法, 声明一个NSOperationQueue,

            NSOperationQueue *queue = [[[NSOperationQueue alloc ] init] autorelease];

            [queue addOperation:testNSoperation];

     一旦一个操作被加入队列,该队列就会启动并开始处理它(即调用该操作类的main方法)。一旦该操作完成队列就会释放它。 此例中, 它会自动调用TestNSOperation里的start函数。

      如果需要多个NSOperation,你需要设置queue的一些属性,如果多个NSOperation之间有依赖关系,也可以设置,具体可以参考API 文档。 

      可以给操作队列设置最多同事运行的操作数: [queue setMaxConcurrentOperationCount:2]; 

iOS多线程系列(二)------NSOperation和NSOperationQueue