iOS 多线程方案

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

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

<ul>
<li>pthread</li>
</ul>

<ul>
<li>NSThread</li>
</ul>

<ul>
<li>NSOperation</li>
</ul>

<ul>
<li>GCD (Grand Central Dispatch)</li>
</ul>

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

几种技术方案的比较

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

<li>
Cocoa operation
优点:不需要关心线程管理,数据同步的事情,可以把精力放在自己需要执行的操作上。
Cocoa operation 相 关的类是 NSOperation ,NSOperationQueue。NSOperation是个抽象类,使用它必须用它的子类,可以实现它或者使用 它定义好的两个子类:NSInvocationOperation 和 NSBlockOperation。创建NSOperation子类的对象,把对 象添加到NSOperationQueue队列里执行。 </li>

<li>GCD
Grand Central Dispatch (GCD) 是Apple开发的一个多核编程的解决方法。在iOS4.0开始之后才能使用。GCD是一个替代诸如 NSThread, NSOperationQueue, NSInvocationOperation等技术的很高效和强大的技术。</li>
</ul>

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

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

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

线程分类:

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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Object C中创建线程的方法是什么?如果在主线程中执行代码,方法是什么?如果想延时执行代码、方法又是什么? 1...
    AlanGe阅读 5,806评论 0 17
  • 多线程 在iOS开发中为提高程序的运行效率会将比较耗时的操作放在子线程中执行,iOS系统进程默认启动一个主线程,用...
    郭豪豪阅读 7,414评论 0 4
  • 多线程基本概念 单核CPU,同一时间cpu只能处理1个线程,只有1个线程在执行 。多线程同时执行:是CPU快速的在...
    WeiHing阅读 3,994评论 1 5
  • 原文地址 http://www.cnblogs.com/kenshincui/p/3983982.html 大家都...
    怎样m阅读 5,092评论 0 1
  • 行在夜间的路灯下 半透明的影子是活着的风 坐在学校的教室里 窗外洒进的阳光是死去的太阳 风儿误杀挂在枝头的花朵 花...
    银河铁道之夜阅读 1,332评论 0 4