iOS多线程之NSThreadNSOperationQueueNSObject和GCD的区别

Posted 墨隐于非

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS多线程之NSThreadNSOperationQueueNSObject和GCD的区别相关的知识,希望对你有一定的参考价值。

区别:

  • Thread:

  是这几种方式里面相对轻量级的,但也是使用起来最负责的,你需要自己管理thread的生命周期,线程之间的同步。线程共享同一应用程序的部分内存空间, 它们拥有对数据相同的访问权限。你得协调多个线程对同一数据的访问,一般做法是在访问之前加锁,这会导致一定的性能开销。在 ios 中我们可以使用多种形式的 thread。

  • Cocoa threads(NSObject):

  使用 NSThread 或直接从 NSObject 的类方法 performSelectorInBackground:withObject: 来创建一个线程。如果你选择thread来实现多线程,那么 NSThread 就是官方推荐优先选用的方式。

  • NSOperationQueue:

  Cocoa operations是基于 Obective-C实现的,类 NSOperation 以面向对象的方式封装了用户需要执行的操作,我们只要聚焦于我们需要做的事情,而不必太操心线程的管理,同步等事情,因为NSOperation已经为我 们封装了这些事情。 NSOperation 是一个抽象基类,我们必须使用它的子类。iOS 提供了两种默认实现:NSInvocationOperation 和 NSBlockOperation。但当单独使用NSOperation的子类去创建线程的时候,线程没有被真正的创建,需要借助 NSOperationQueue类,当子线程被添加到NSOperationQueue类的对象中时,线程才真正创建成功,这个时候不要让子线程去调用 start方法,否组程序会crush

  • Grand Central Dispatch (GCD):

  iOS4 开始支持,纯C语言封装,提供了很多非常强大的函数。GCD是苹果公司为多核的并行运算提出的解决方案,会自动利用更多的CPU内核(比如双核、四核), 会自动管理线程的生命周期(创建线程、调度任务、销毁线程),程序员只需告诉GCD想执行什么任务,不需要编写任何线程管理代码。

以上是关于iOS多线程之NSThreadNSOperationQueueNSObject和GCD的区别的主要内容,如果未能解决你的问题,请参考以下文章

iOS底层探索之多线程(十四)—关于@synchronized锁你了解多少?

iOS底层探索之多线程(十三)—锁的种类你知多少?

iOS多线程开发之GCD(下篇)

iOS多线程之Thread

iOS底层探索之多线程—GCD源码分析(栅栏函数)

ios多线程之GCD