iOS中的多线程简答

一、iOS中使用多线程的方式

主要有三种:NSThread、GCD、NSOperation&NSOperationQueue

二、有什么区别

1、NSThread 和 GCD的区别

1)NSTread是OC类,是对线程的一个封装,而GCD是纯C语言API;

2)NSTread需要我们管理线程的生命周期。包括线程对象的创建、取消、暂停、释放等。而GCD我们只需要关心队列和任务,不用关心底层线程;

3)NSTread提供了线程的取消、暂停的操作接口,但GCD没有这样的直接的API;

4)NSTread是用户级别的线程,不能很好的利用系统资源;而GCD是内核级别的线程,起初设计是针对多核系统开发的,内部统一维护一个线程池,能够根据系统资源合理分配线程数量,高效利用资源,在多核系统实现真正的并发;

5)NSThead只有在我们需要自己管理线程的时候使用比较好,比如我们想自己维持一个常驻线程用于随时唤醒处理一些任务等。其他场景其实都可以用GCD或者NSOperation来替代。而且在处理多任务等场景下GCD更加方便和高效。

2、NSOperation&NSOperationQueue 和GCD的区别

NSOperation&NSOperationQueue 是对GCD的上层封装的OC类。但是NSOperation相比于GCD提供了任务的暂停、恢复和取消、任务间依赖以及任务优先级等丰富的功能,同时可以通过 KVO 对NSOperation的状态进行检测,方便管理我们自定义的任务。NSOperation默认情况下是同步执行的,也就是在当前的线程里面执行,如果想实现异步可以结合NSOperationQueue来用,当NSOperationQueue的最大并发数大于1时可以实现并发。在使用上如果我们只关心任务的发起和结果的情况下两个都可以用,但GCD明显比较方便。所以要结合具体场景使用。

你可能感兴趣的:(iOS中的多线程简答)