ios多线程之我见

来源:互联网 发布:唐氏筛查 测算软件 编辑:程序博客网 时间:2024/06/05 01:58

引言

随着多核CPU的兴起,传统的线程处理方法已经不能满足现在的需求, 为了解决这个问题,apple ios提出了新的解决方法:

  • GCD grand central dispatch,serial dispatch queue按序执行,concurrent queue并发执行
  • operation queues, 遵循first in, first out原则

operation queues

ios提供了NSOperation来处理这种类型的queue, NSOperation是一个abstract class,你不能直接使用它,不过它也提供了很多有用的方法。同时iOS也提供了两种NSOperation的子类:NSInvocationOperation和NSBlockOperation。使用的方法很简单,参考下面的步骤和sample code:
  • 创建NSInvocationOperation
  • 创建NSBlockOperation
  • 实现自己的NSOperation子类,必须实现main函数
  • 创建NSOperationQueue,调用addOperation来创建线程,调用相关的方法
sample code,
- (IBAction)ExecuteThread:(id)sender {        NSLog(@"ExecuteThread");    NSOperationQueue* queue = [[NSOperationQueue alloc] init];    MyNonConcurrentOperation* op = [[MyNonConcurrentOperation alloc] init];    [queue addOperations:[NSArray arrayWithObject:op] waitUntilFinished:YES];        NSLog(@"after addOPeration");            [queue addOperationWithBlock:^{        NSLog(@"addOperationWithBlock in block");    }];         NSLog(@"after addOperationWithBlock");        NSInvocationOperation* iop = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(MyInvocationTask) object:nil];    [queue addOperation:iop];        NSBlockOperation* bop = [NSBlockOperation blockOperationWithBlock:^{        NSLog(@"NSBlockOperation in block");    }];    [queue addOperation:bop];

Dispatch Queues

Dispatch Queues有如下三种类型:
  • Serial, 按序执行
  • Concurrent, 并发
  • Main dispatch queue, 在main thread中执行





原创粉丝点击