IOS开发之多线程与GCD

线程的执行 :

下图明显可以看出,如果不开启多线程的话,程序先走runA方法在走runB,然后再回到runA,再走runC ,A-->B-->C。

如果runA在加载网络请求(比如加载图片),这样的话就会阻塞主线程,也就是说先加载完图片在走下面的方法,比如runC是一个点击事件,图片还没加载出来的时候,点击事件是不响应的,这需要什么方法取解决呢?这就得开启多线程了。

IOS开发之多线程与GCD_第1张图片

多线程的执行 

开启多线程之后在走runB的同时也在走runC,这样就不会租塞主线程了。

IOS开发之多线程与GCD_第2张图片

多线程的基本概念:

1.每一个程序都有一个主线程,程序启动是创建(调用main函数来创建)。

2.主线程的生命周期是和应用程序绑定的,程序退出,主线程也就停止了。

3.多线程技术表示,一个应用程序有多个线程,使用多线程能提供CPU的使用率,防止主线程阻塞。

4.任何有可能阻塞主线程的任务不要在主线程中执行(比如执行网络)。


多线程使用的注意

1.线程使用不是无节制的,iso中的主线程的堆栈大小是1M,从第二个线程开始是512KB,这些数值不能通过编译器开关或线程API函数更改。

2.只有主线程有直接修改UI的能力(比如要设置image,得先回到主线程中设置)。


子线程的内存管理:需要加入自动释放池中


IOS中的三种多线程技术

1.pthread是POISIX线程的API,是C语言的技术,可以直接操作线程。

2.NSThread是每个NSThread对象对应一个线程,量级较轻,是对pthread的抽象。

3.GCD(Grand Central Dispatch)是基于C语言的框架,使用队列管理线程,可以充分利用多核。

4.NSOperation/NSOperationQueue是面向对象的线程技术,是对GCD的抽象。


三种多线程的技术对比

一:NSThread

1.优点:NSThread比其他两个轻量级,使用简单。

2.缺点:需要自己管理线程的生命周期、线程同步、加锁、睡眠以及唤醒,线程的同步对线程的加锁会有一定的系统开销。

二:NSOperation

1.不需要关心线程管理,数据同步的事情,可以把精力放在自己需要操作的执行上

2.NSOperation是面向对象的

三:GCD

1.是由苹果开发的一个多核编程的解决方案,ios4.0后才可以用,是替代以上两种的高级和强大的技术。

2.是基于C语言的


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