V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
iOS 开发实用技术导航
NSHipster 中文版
http://nshipster.cn/
cocos2d 开源 2D 游戏引擎
http://www.cocos2d-iphone.org/
CocoaPods
http://cocoapods.org/
Google Analytics for Mobile 统计解决方案
http://code.google.com/mobile/analytics/
WWDC
https://developer.apple.com/wwdc/
Design Guides and Resources
https://developer.apple.com/design/
Transcripts of WWDC sessions
http://asciiwwdc.com
Cocoa with Love
http://cocoawithlove.com/
Cocoa Dev Central
http://cocoadevcentral.com/
NSHipster
http://nshipster.com/
Style Guides
Google Objective-C Style Guide
NYTimes Objective-C Style Guide
Useful Tools and Services
Charles Web Debugging Proxy
Smore
shippo7
V2EX  ›  iDev

GCD vs NSOperationQueue 讨论

  •  
  •   shippo7 · 2016-01-07 23:48:45 +08:00 · 3314 次点击
    这是一个创建于 3262 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我最近在学习 GCD 和 Operation Queue 的区别,看完网上的众多教程之后,有些混乱,推荐这两种的都有。求大神讲解这两种的区别,如果在面试中问到这两者如何选择,应该怎么回答?
    6 条回复    2016-03-12 02:35:17 +08:00
    shippo7
        1
    shippo7  
    OP
       2016-01-08 00:08:13 +08:00 via iPhone
    说说我的理解:

    GCD 可以避免 Operation Queue 多个 block 直接的传值问题,代码更为简洁。

    但是 StackOverFlow 上有个答案说 GCD 比 Operation Queue 更为底层,因为基于 C ,在没有特别需求的情况下,应该用高级代码
    loveuqian
        2
    loveuqian  
       2016-01-08 00:15:20 +08:00 via iPhone
    后者是前者的一套封装,性能肯定是前者高
    一般用前者敲句 dispatch 就出来全部你想要的
    之前看到一句话
    还有用 gcd 解决不了的问题?那我选择辞职
    0xfan
        3
    0xfan  
       2016-01-08 10:24:59 +08:00 via iPhone
    NSOperationQueue 用 OO 的思想对 GCD 进行了封装,更高级。本质上都是同一套东西,选择上就看个人喜好了。网上肯定是推荐什么的都有,看的越多反而越纠结。
    wingzki
        4
    wingzki  
       2016-01-08 16:14:10 +08:00
    Operation Queue 是基于 GCD 的面向对象封装。如果你需要对任务的过程进行精确的控制用 Operation ,如果随便后台算几个数画个图什么的用 GCD 。不过理论上 Operation 能干的事 GCD 都能干,就是代码多点麻烦点,需要你有一定的功底。
    sudaNY
        5
    sudaNY  
       2016-03-11 12:28:23 +08:00
    好像楼上都说的是封装方面,其实 NSOperationQuene 的特点是可以按顺序走, gcd 是无序的。
    shippo7
        6
    shippo7  
    OP
       2016-03-12 02:35:17 +08:00
    @sudaNY

    gcd 也可以提交同步队列 dispatch_sync(queue, block)

    NSOperationQueue 的确只是个封装而已,底层调用的还是 gcd
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3416 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 00:54 · PVG 08:54 · LAX 16:54 · JFK 19:54
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.