iOS 多线程方案

在iOS中每个进程启动后都会建立一个主线程(UI线程),这个线程是其他线程的父线程。由于在iOS中除了主线程,其他子线程是独立于Cocoa Touch的,所以只有主线程可以更新UI界面(新版iOS中,使用其他线程更新UI可能也能成功,但是不推荐)。iOS中多线程使用并不复杂,关键是如何控制好各个线程的执行顺序、处理好资源竞争问题。

iOS 多线程的四种技术方案:

iOS 多线程方案_第1张图片


  • pthread


  • NSThread


  • NSOperation


  • GCD (Grand Central Dispatch)

后三种方式是随着iOS的发展逐渐引入的,所以相比而言后者比前者更加简单易用,并且GCD也是目前苹果官方比较推荐的方式(它充分利用了多核处理器的运算性能)。做过.Net开发的朋友不难发现其实这三种开发方式 刚好对应.Net中的多线程、线程池和异步调用,因此在文章中也会对比讲解。

几种技术方案的比较



  • NSThread:
    优点:NSThread 比其他两个轻量级
    缺点:需要自己管理线程的生命周期,线程同步。线程同步对数据的加锁会有一定的系统开销

  • Cocoa operation
    优点:不需要关心线程管理,数据同步的事情,可以把精力放在自己需要执行的操作上。
    Cocoa operation 相 关的类是 NSOperation ,NSOperationQueue。NSOperation是个抽象类,使用它必须用它的子类,可以实现它或者使用 它定义好的两个子类:NSInvocationOperation 和 NSBlockOperation。创建NSOperation子类的对象,把对 象添加到NSOperationQueue队列里执行。
  • GCD
    Grand Central Dispatch (GCD) 是Apple开发的一个多核编程的解决方法。在iOS4.0开始之后才能使用。GCD是一个替代诸如 NSThread, NSOperationQueue, NSInvocationOperation等技术的很高效和强大的技术。

NSThread封装性最差,最偏向于底层,主要基于thread使用

GCD是基于C的API,直接使用比较方便,主要基于task使用

NSOperation是基于GCD封装的NSObject对象,对于复杂的多线程项目使用比较方便,主要基于队列使用

线程分类:

主线程 : UI线程,显示、刷新UI界面,处理UI控件的事件
子线程 : 后台线程,异步线程

注意点:不要把耗时的操作放在主线程,要放在子线程中执行,因为主线程包含用户界面的操作,因此减少主线程执行耗时操作,重要的原因是为了避免挑战用户耐心。

你可能感兴趣的:(iOS 多线程方案)