刷新时间慢的时候用timer定时器

以下内容为借用,作者:FlyElephant
出处:http://www.cnblogs.com/xiaofeixiang

iOS开发-NSOperationGCD区别

Mac OS X 10.6及iOS4.0之后导入了可以使全体线程更高效运行,并且使并行处理应用更易开发的架构,GCD(Grand Central  Dispatch),同时引入的还有Run Loop,线程(包括Cocoa和POSIX)和Operation。GCD拥有非常轻量级的工作单元和并发方式,并且由系统决定其最佳调度方式。这个时候出现了一个问题,NSOperation如何处理呢?

其实我们在通过NSOperation和GCD进行开发过程中,会发现两者执行的方式有许多相似之处,NSOperation和GCD参照对比,NSOperationQueue和dispatch_queue参照对比,但是两者之间还是有许多差别的,具体区别:

1.GCD的核心是C语言写的系统服务,执行和操作简单高效,因此NSOperation底层也通过GCD实现,换个说法就是NSOperation是对GCD更高层次的抽象,这是他们之间最本质的区别.因此如果希望自定义任务,建议使用NSOperation;

2.依赖关系,NSOperation可以设置两个NSOperation之间的依赖,第二个任务依赖于第一个任务完成执行,GCD无法设置依赖关系,不过可以通过dispatch_barrier_async来实现这种效果;

3.KVO(键值对观察),NSOperation和容易判断Operation当前的状态(是否执行,是否取消),对此GCD无法通过KVO进行判断;

4.优先级,NSOperation可以设置自身的优先级,但是优先级高的不一定先执行,GCD只能设置队列的优先级,无法在执行的block设置优先级;

5.继承,NSOperation是一个抽象类实际开发中常用的两个类是NSInvocationOperation和NSBlockOperation,同样我们可以自定义NSOperation,GCD执行任务可以自由组装,没有继承那么高的代码复用度;

6.效率,直接使用GCD效率确实会更高效,NSOperation会多一点开销,但是通过NSOperation可以获得依赖,优先级,继承,键值对观察这些优势,相对于多的那么一点开销确实很划算,鱼和熊掌不可得兼,取舍在于开发者自己;

关于主要的区别都已经总结,根据实际开发中来说,GCD使用情况较多,简单高效,从变成原则上来看,应该是使用高层次的抽象,避免使用低层次的抽象,那么无疑我们应该选择NSOperation,因为复杂的任务可以自己通过NSOperation实现,日常还是GCD的天下,毕竟GCD有更高的并发和执行能力。

最新文章

  1. MySQL 对于千万级的大表要怎么优化?
  2. 决策树 -- ID3算法小结
  3. CSS3之图片3D翻转效果(网页效果--每日一更)
  4. Quartz.NET总结(二)CronTrigger和Cron表达式
  5. Java中系统属性Properties介绍 System.getProperty()参数大全
  6. 学习jsp(1)
  7. activiti自定义流程之Spring整合activiti-modeler5.16实例(二):创建流程模型
  8. DDL、DML和DCL的理解
  9. 转换 Html 内容为纯文本内容(html,文本互转)
  10. loadrunner:web services接口测试
  11. Xuan.UWP.Framework
  12. Java上传Excel并解析
  13. 阿里图标库iconfont入门使用
  14. JavaScript和JQuery的区别
  15. java基础-开发工具IDEA
  16. 理解 Web 中的Session
  17. C++设计模式——原型模式
  18. 【洛谷P2584】【ZJOI2006】GameZ游戏排名系统题解
  19. day8--socketserver
  20. LITTLE-ENDIAN(小字节序、低字节序) BOM——Byte Order Mark 字节序标记 数据在内存中的存放顺序

热门文章

  1. linux 之 getopt_long()
  2. VS调试技巧与快捷键&&VS快捷键
  3. ios学习之常见问题记录
  4. download youtube video
  5. ORM查询语言OQL
  6. asp.net MVC 路由机制 Route
  7. VMware vSphere 服务器虚拟化之二十 桌面虚拟化之准备虚拟桌面模版
  8. Mysql连表查询
  9. AsyncTask兼容性
  10. freemarker 遍历 hashmap 到select option