iOS多种多线程使用方法

概述

iOS下使用多线程有几种方法:

  • NSThread类
  • Cocoa NSOperation
  • GCD(Grand Central Dispatch)
  • NSObject自带方法
  • C的pthread类库

NSThread类

iOS早期的多线程类库,可以有两种方式创建新线程:

  • 使用detachNewThreadSelector方法
    [NSThread detachNewThreadSelector:@selector(doSomething:) toTarget:self withObject:nil];
    
  • 创建一个NSThread对象并调用start方法
    NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(doSomething:) object:nil];
    [thread start];
    

另外还提供可以判断当前是否是主线程等方法;

Cocoa NSOperation

NSOperation是用来控制线程并发的,可以创建多个NSOperation,然后放到NSOperationQueue中。 NSOperation只是基类,实际使用的还是NSInvocationOperation或者NSBlockOperation类。(主要用selector还是block的区别)

NSInvocationOperation *operation = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(doSomething:) object:nil];

NSOperationQueue *queue = [[NSOperationQueue alloc] init];
[queue addOperation:operation];

设置最大并发数:

[queue setMaxConcurrentOperationCount:5];

GCD(Grand Central Dispatch)

一套BSD层面的接口,iOS4.0以后才加入,轻量级且非常强大,性能也高。 可替代NSThread和NSOperation。

NSObject自带方法

最简单的做法。在NSObject中也封装在另外一个线程运行的方法:

[myObj performSelectorInBackground:@selector(doSomething) withObject:nil]; 

C的pthread类库

C的传统类库:

#include <pthread.h>

提供一套创建和控制线程的函数库:

void thread_create(void)
{
    int temp;
    memset(&thread, 0, sizeof(thread));
    /*创建线程*/
    if((temp = pthread_create(&thread[0], NULL, thread1, 10)) != 0)
        printf("create successfully!\n");
    else
        printf("create fail!\n");
}

参考资料