iOS 多线程总结
2015-12-10 12:34
232 查看
1、首先来谈谈,为什么要使用多线程。
现在的智能手机,基本上都是双核、四核。所以,苹果公司为了迎合硬件,于是就采用多线程编程,更加充分的利用多核技术。 比如说,tableView的数据源就可以先放在子线程中处理,处理完毕后再到主线程中,通知tableView的页面布局。
2、要谈一谈多线程的几种方式
2.1、首先,谈的是NSThread
1、需要知道,NSThread是一种轻量级编程; 2、方式有两种:A、通过alloc出来的实例,需要手动开启线程(start方法) B、通过类方法detachNewThread出来的,属于自动开启。 3、有一种可以替换NSThread是NSObject的后台操作方式,方法名是 performSelectorInBackground:
2.2、其次,要谈一谈GCD
1、需要知道的是,GCD是一种C语言,所有的函数名以dispatch打头,是打算替换掉NSThread的; 2、需要知道的是,GCD中其实是没有线程的概念的,GCD中只有任务和队列之分; 3、GCD中的任务---》就是定义你要干什么操作; 4、GCD中的队列---》就是你把你分配好的任务按着队列的方式进行管理,其中队列遵循的是FIFO; 5、GCD 中的同步/异步 --是否可以开启新线程的能力 dispatch_asyn 异步 ---》可以开启新的线程。 dispatch_syn 同步 ---》这个线程内部,不具备开启新线程的功能。 6、主队列 -- dispatch_main_queue() 全局队列 -- dispatch_get_global_queue() 7、关于安全性,只执行一次的操作,dispatch_once....应用到单例模式中创建一个单例。
2.3、最后, 需要谈一谈NSOperation&NSOperationQueue
1、首先,要意识到一点,NSOperation 相当于是任务的说法,NSOperationQueue 就是创建队列; 2、在创建任务的时候,会遇到NSOperation的两个子类: 2.1、NSInvocationOperation 2.2、NSBlockOperation 其中两个类都是创建一个任务,并且,两个类创建出来的实例,都是需要手动开启线程的,也就是start方法。 3、之后就要,谈到NSOperationQueue了,可以创建出一个队列,这个队列拿来干嘛的呢? 就是把你创建的一些任务,添加到这个队列上,并按照FIFO的方式进行管理。当然这里是不需要你手动开启的。 **但是,需要注意的一点就是,这个queue必须设置最大并发数,setMax....** 4、要意识到NSOperation&NSOperationQueue是面向对象的,其实就是 **对GCD的一种封装**,所以这就是我先谈GCD的原因。 5、需要注意,这里的**任务**之间是可以创建依赖关系的, [A addDependency: B];也就是A必须要等到B运行结束后才开始,其中也有移除依赖关系的方法;
以上是我个人对多线程的理解,请多多指教。