首先声明一下。小汤我在实际开发中呢,实际上也是喜欢用GCD多一点,由于用起来感觉更方便。

可是,事实是什么呢?

苹果推荐使用的实际上是NSOperation。所以希望对此没有研究的各位不要再在博客中误导他人了啊。

再换句话来说。苹果开发使用的Objective-C语言就是面向对象的,她怎么可能推荐大家使用基于C语言的面向过程开发的东西呢? (这句话仅仅是吐槽,请勿喷…)

关于NSOperation

非常多人,在博客中说到NSOperation的时候呢,都会以它是iOS2.0推出的 这一点来强调后来iOS4.0推出的GCD才是苹果推荐使用的多线程使用方式!

对于这一点,我认为倒也不能全怪他们。由于非常多人在开发中都是通过查资料来学习的。非常少有愿意看苹果给出的 官方文档 的。

其实,苹果在官方文档中对此有专门的讲到,NSOperation的确是iOS2.0推出的。那个时候的NSOperation是通过NSThread实现的。效率的确一般,可是。!

苹果在iOS4.0推出GCD之后。又重写了NSOperation。从此以后,NSOperation的底层就是由GCD实现的了!。

以下是官方文档的原文:

(Operation queues usually provide the threads used to run their operations. In OS X v10.6 and later, operation queues use the libdispatch library (also known as Grand Central Dispatch) to initiate the execution of their operations. As a result, operations are always executed on a separate thread, regardless of whether they are designated as concurrent or non-concurrent operations. In OS X v10.5, however, operations are executed on separate threads only if their isConcurrent method returns NO. If that method returns YES, the operation object is expected to create its own thread (or start some asynchronous operation); the queue does not provide a thread for it.)

NSOperation和GCD的对照:

  1. 首先,这两者相对于NSThread或者是跨平台的pthread而言,他们的线程的生命周期都是自己主动管理的,开发人员仅仅要关注运行什么样的操作,不须要编写不论什么线程管理的代码
  2. GCD是苹果公司为多核的并行运算提出的解决方式,会自己主动利用很多其它的CPU内核(比方双核、四核),而NSOperation是基于GCD的面向对象的封装。拥有GCD的特性。
  3. GCD提供了一些NSOperation不具备的功能:

    1) 一次性运行
    2) 延迟运行
    3) 调度组
  4. GCD是将任务(block)加入到队列(串行/并行/全局/主队列),而且以同步/异步的方式运行任务的函数,而NSOperation将操作(通常是异步的任务)加入到队列(通常是并发队列),就会运行指定操作的函数。

  5. NSOperation里提供了一些方便的操作:

    1) 最大并发数
    2) 队列的暂定/继续
    3) 取消全部的操作
    4) 指定操作之间的依赖关系(GCD能够用同步实现)

    当中。关于最大并发数这一条,就是苹果推荐使用NSOperation的还有一条强有力的佐证。

    由于相对于苹果曾经限制了线程的最大并发数的这一情况而言。如今。

        苹果不再限制线程的最大并发数。

也就是说。这对于使用GCD开发是不利的,由于GCD是无法控制线程的最大并发数的,而线程的并发数一旦过多…你懂得~

所以,综上。苹果实际上推荐我们开发过程中使用的是NSOperation,不是GCD!还请各位在开发中稍加注意哦~

不要再坑人啦!NSOperation才是苹果推荐使用的多线程技术!的更多相关文章

  1. 多线程技术 NSThread & NSOperation & GCD

    多线程:在iOS开发中,用到多线程的处理问题的时候有很多,比如异步下载数据时刷新界面等等. 引入多线程来处理问题的关键就是,基于多线程可以使界面更加流畅,防止界面假死. 界面假死:比如你单击一个按钮来 ...

  2. iOS的三种多线程技术NSThread/NSOperation/GCD

    1.iOS的三种多线程技术 1.NSThread 每个NSThread对象对应一个线程,量级较轻(真正的多线程) 2.以下两点是苹果专门开发的"并发"技术,使得程序员可以不再去关心 ...

  3. iOS- NSThread/NSOperation/GCD 三种多线程技术的对比及实现

    1.iOS的三种多线程技术 1.NSThread 每个NSThread对象对应一个线程,量级较轻(真正的多线程) 2.以下两点是苹果专门开发的“并发”技术,使得程序员可以不再去关心线程的具体使用问题 ...

  4. iOS- NSThread/NSOperation/GCD 三种多线程技术的对比及实现 -- 转

    1.iOS的三种多线程技术 1.NSThread 每个NSThread对象对应一个线程,量级较轻(真正的多线程) 2.以下两点是苹果专门开发的“并发”技术,使得程序员可以不再去关心线程的具体使用问题 ...

  5. NSThread/NSOperation/GCD 三种多线程技术

    1.iOS的三种多线程技术 1.NSThread 每个NSThread对象对应一个线程,量级较轻(真正的多线程) 2.以下两点是苹果专门开发的“并发”技术,使得程序员可以不再去关心线程的具体使用问题 ...

  6. linux shell编程,先等10秒再判断是否有进程存在,存在就再等10秒再杀了进程才运行

    linux shell编程,先等10秒再判断是否有进程存在,存在就再等10秒再杀了进程才运行 crontab每分钟执行一次,但5秒以上才有更新数据,有时候一分钟可能跑不完上一个进程,需要先等10秒再判 ...

  7. 前App Store高管揭秘:关于“苹果推荐”的七大真相

    相信你已经看过很多这样那样关于如何获得苹果商店推荐的攻略了,但其实很多人依然陷入了很大的误区.前不久采访了前App Store团队高管Greg Essig,向各位开发者揭示关于获得苹果推荐的真相. 在 ...

  8. NSThread 子线程 Cocoa NSOperation GCD(Grand Central Dispatch) 多线程

    单词:thread 英 θred:n 线.思路.vt 穿过.vi 穿透过 一.    进程.线程 进程:正在进行中的程序被称为进程,负责程序运行的内存分配,每一个进程都有自己独立的虚拟内存空间 线程: ...

  9. iOS开发之多线程技术——NSOperation篇

    本篇将从四个方面对iOS开发中使用到的NSOperation技术进行讲解: 一.什么是NSOperation 二.我们为什么使用NSOperation 三.在实际开发中如何使用NSOperation ...

随机推荐

  1. [问题解决] LaTex Error:Unknown graphics extension:.eps

    错误:编译的时候显示:“!LaTex Error:Unknown graphics extension:.eps” 发生场景:Latex写论文 解决方案: latex eps.texdvi2ps ep ...

  2. 未能加载文件 %CommonDir%\dte90a.olb。未能找到该文件,因此解决此问题的尝试失败

    分类: 日常应用问题 2012-08-04 10:53 914人阅读 评论(0) 收藏 举报 microsoft2010c vs2010 启动时提示 ------------------------- ...

  3. Oracle字符编码

    .检查服务器编码: 执行SQL语法: Java代码 select * from v$nls_parameters; 或 Java代码 select * from nls_database_parame ...

  4. Javascript禁止父元素滚动条滚动, pc、移动端均有效

    在网页中经常会遇到这样的场景, 网页比较长有滚动条, 然后网页内的某个内容块里面的内容也比较长, 也具有滚动条.当鼠标移到内容块中使用滚动条来滚动查看内容到达底部或头部的时候,父元素的滚动条也就开始滚 ...

  5. 【转载】详解java类的生命周期

    原文地址:http://blog.csdn.net/zhengzhb/article/details/7517213 引言 最近有位细心的朋友在阅读笔者的文章时,对java类的生命周期问题有一些疑惑, ...

  6. 【JSP引入报错】--package javax.servlet.jsp does not exist

    在eclipse maven中没报错的JSP在引入到netbeans的时候,JSP就报错了. 错误提示:package javax.servlet.jsp does not exist 百度找了下,有 ...

  7. 最短路(dijskra+SPFA+Bellman)

    最短路 Time Limit : 5000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) Total Submissio ...

  8. Java中Return和Finally运行顺序的实现

    以下这段代码的运行结果是如何的呢? [java] view plaincopyprint? publc int test(){ int x; try{ ; return x; }catch(Excep ...

  9. 艰苦的RAW格式数据恢复之旅

    艰苦的RAW格式数据恢复之旅 1.RAW 格式形成原因 2.RAW 格式的解决的方法 经验之谈: 1.RAW 格式形成原因 关于形成的原因,在网上搜索了下,千奇百怪的都有,就不一一诉说了,可是有果必有 ...

  10. 折叠Collapse插件

    实例 折叠(Collapse)插件可以很容易地让页面区域折叠起来.无论您用它来创建折叠导航还是内容面板,它都允许很多内容选项. .collapse 隐藏内容. .collapse.in 显示内容. . ...