前面了iOS的NSThread方法来实现多线程,这篇就简单的讲讲NSOperation和NSOperationQueue。
NSOperation是一个抽象类,定义一个要执行的任务。NSOperationQueue是一个任务队列,帮助对NSOperation所定义的任务进行管理。当任务加入到任务队列后,会自动按照优先级和依赖关系自动运行。
NSOperation是不能直接使用的,我们必须使用继承类。iOS提供了两个实现好的子类,分别是NSInvocationOperation和NSBlockOperation。NSOperation有个start方法,给你提供了一种不加入NSOperationQueue而运行任务的方式,当然这对于开发者来说要求更高一点。
我还是用上一篇的那个功能做例子,上代码:
- (void)viewDidLoad { [super viewDidLoad]; NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(downloadImage:) object:IMAGE_URL]; NSOperationQueue *queue = [[NSOperationQueue alloc] init]; [queue addOperation:operation]; }
看上去很简单,仅仅就是创建任务,然后加入到队列。这个队列是个任务的pool,遵循生产者-消费者的关系,当有任务的时候会自动运行任务。我们可以使用setMaxConcurrentOperationCount:这个方法来设置这个queue里面的线程总数,默认值是-1,意思是没有限制。
时间: 2024-10-26 21:49:56