iPhone 操作队列NSOperationQueue

来源:互联网 发布:risksystem数据库 编辑:程序博客网 时间:2024/06/05 03:18

iPhone 操作队列NSOperationQueue

    iPhone 本身也支持多线程开发,同样, NSThread 类提供对多线程开发的支持时也面临多线程的共享数据管理和死锁问题,于是 iPhone 也提供了类似于 Java 线程池的解决方案:任务队列 NSOperationQueue 类。

    和 Java 语言的 Runnable 接口一样, iPhone 提供了 NSOperation 接口进行任务对象的封装,而通过将任务对象加入到 NSOperationQueue 队列, NSOperationQueue 队列会分配线程进行任务对象的执行,任务对象的执行通过 - (void)main 方法,下面是典型的任务对象和任务队列的实现:

@interface ThreadPoolTask:NSOperation
{
}
@end

@implementation ThreadPoolTask
- (void)main
{
  NSLog(@”start execute”);
}
@end

    和 Java 语言中一样,构造一个多线程池并添加任务对象到线程池中,线程池会调用任务对象的 - (void)main 方法执行任务, iPhone 中典型的任务队列的实现如下:

NSOperationQueue* threadPool = [[NSOperation alloc] init];
[threadPool setMaxConcurrentOperationCount:4];
for(int i = 1;i <= 5;i++)
{       
 NSString* task = [NSString stringWithFormat:@”task %d”,i];
NSLog(@“put %@”,task);
[threadPool add:([[ThreadPoolTask alloc] init])];
}

    可以看到, iPhone 通过 NSOperationQueue 提供了一套类似于线程池的机制,通过它可以更加方便的进行多线程的并发操作,从而使得程序员从繁杂的多线程共享数据管理和死锁问题中解脱出来。

原创粉丝点击