• NSTimer是一个计时器对象,方法调用在对未来的选择对象。
  • NSThread是一个线程类。 也就是创建一个线程。
  • NSTask类是一个过程,一种方式运行程序从您的其他程序。
  • NSOperation是一个非常漂亮的抽象的任务。 在这个类中嵌入您的操作,你可以很容易地通过一个NSOperationQueue执行类的手段同时进行。
  • NSRunLoop其实NSRunLoop的本质是一个消息机制的处理模式。在某种意义上摘要和适应的选择()的Unix系统调用,管理和调度输入源事件和线程计时器。

每个程序运行在至少一个线程 。 你能想到的每一个单独的进程中的程序执行的线程,每个其他平行进行。

如果你有一些港口样的用户界面,或其他代码,需要听取网络事件,你需要一个运行循环 。 每个NSThread自动都有自己的运行循环,你很少有直接关心他们自己。 在运行循环也创造和释放autorelease池负责。

[查看更多关于autorelease池的讨论意见。 最重要的一点要记住的是,新的线程必须考虑设立一个autorelease池照顾。 例如,与detachNewThreadSelector调用的方法应该为他们的第一个和最后一个行如下:

NSAutoreleasePool *pool = [ [ NSAutoreleasePool alloc ] init ];  [code here]  [pool release]; 

这同样适用于其他线程使用的技术产生。]

主线程 ,所有的UI处理正在发生,运行循环是非常重要的,因为它保持了界面反应。 这就是为什么你应该永远不会运行的代码,就在主线程耗时:它会吃掉所有的线程和循环的运行时间将不会被允许运行往往不够,导致锁定或缓慢接口。 如果您需要执行耗时计算,或保持一个任务在后台运行,你应该创建一个新线程。 同样,你可能不必考虑新的运行循环正在形成。 在一个新线程执行的方法简单的方法:

[NSThread detachNewThreadSelector:@selector(theSelector) toTarget:self withObject:nil]; 

线程间的通信可能会非常棘手,你应该知道performSelector的方法:onThread:withObject:waitUntilDone:和performSelectorOnMainThread:withObject:waitUntilDone:

定时器也处理运行循环。 相反运行循环,你可能经常会使用你的程序定时器直接。 建立一个最简单的方法是非常计时器:

[self performSelector:@selector(aSelector) withObject:nil afterDelay:1.0]; 

但有时你需要创建和管理NSTimer对象自己,例如能够取消和重新使用一个计时器。

一个NSTask用于运行一个又一个计划,目前一子的。 这有点类似于一个独立的线程开始,但是如果子崩溃,您的主要程序将继续运行。 程序之间的通信也很不同从多个线程之间的通信在同一进程中。

你用“iPhone”你的问题,并在iPhone你将永远不会使用NSTasks。

NSOperations是用来当您需要处理不同的任务量较大,他们把队列和/或处理他们在单独的线程(虽然他们没有单独的线程中运行)。 如果您的应用程序需要创建只是少数人,专门线程,则没有理由使用NSOperation类。 但是,如果你会经常产生想与服务器通信任务()必须保持记录,NSOperation和NSOperationQueue能派上用场。

NSRunLoop首先是Run Loop的部分概念,它的作用就是循环、处理事件。具体来说有两个方面: 1. 定时启动任务(一般用和Timer协作);2. 处理事件。
在 单线程的app中,不需要注意Run Loop,但不代表没有。程序启动时,系统已经在主线程中加入了Run Loop。它保证了我们的主线程在运行起来后,就处于一种“等待”的状态(而不像一些命令行程序一样运行一次就结束了),这个时候如果有接收到的事件 (Timer的定时到了或是其他线程的消息),就会执行任务,否则就处于休眠状态。

如果我们要写多线程的程序,可能就需要自己来管理Run Loop。
下面说一下楼主提出的方法中的参数:
RunMode: NSDefaultRunLoopMode,可以把这个理解为一个”过滤器“,我们可以只对自己关心的事件进行监视。一般NSDefaultRunLoopMode是最常用的。

启动run loop的方法就是lz写的这个,它的说明如下:
Runs the loop once, blocking for input in the specified mode until a given date.
启动run loop一次,在特定的run loop mode下等待输入。

如果没有附加input source或是timer,或是过limitDate,run loop就会退出,并且方法返回NO。

下来是Run Loop的使用场合:
1. 使用port或是自定义的input source来和其他线程进行通信
2. 在线程(非主线程)中使用timer
3. 使用 performSelector...系列(如performSelectorOnThread, ...)
4. 使用线程执行周期性工作

run loop不需要创建,在线程中只需要调用[NSRunLoop currentRunLoop]就可以得到
假设我们想要等待某个异步方法的回调。比如connection。如果我们的线程中没有启动run loop,是不会有效果的(因为线程已经运行完毕,正常退出了)。

 
 

NSTimer、 NSTask、 NSThread 和 NSRunloop 之间的区别的更多相关文章

  1. NSThread 、NSRunLoop 和 Dispatch Queue

     iOS多线程编程中,NSOperation和NSOperationQueue无疑是最常用的,它们能满足绝大部分情况下的线程操作.但在完成一些特殊的任务时,我们还是要使用的NSThread和NSRun ...

  2. select、poll、epoll之间的区别总结

    select.poll.epoll之间的区别总结 05/05. 2014 select,poll,epoll都是IO多路复用的机制.I/O多路复用就通过一种机制,可以监视多个描述符,一旦某个描述符就绪 ...

  3. 你真的会玩SQL吗?EXISTS和IN之间的区别

    你真的会玩SQL吗?系列目录 你真的会玩SQL吗?之逻辑查询处理阶段 你真的会玩SQL吗?和平大使 内连接.外连接 你真的会玩SQL吗?三范式.数据完整性 你真的会玩SQL吗?查询指定节点及其所有父节 ...

  4. [转]ExtJs基础--Html DOM、Ext Element及Component三者之间的区别

    要学习及应用好Ext框架,必须需要理解Html DOM.Ext Element及Component三者之间的区别. 每一个HTML页面都有一个层次分明的DOM树模型,浏览器中的所有内容都有相应的DOM ...

  5. iOS中assign,copy,retain之间的区别以及weak和strong的区别

    @property (nonatomic, assign) NSString *title; 什么是assign,copy,retain之间的区别? assign: 简单赋值,不更改索引计数(Refe ...

  6. javascrip中parentNode和offsetParent之间的区别

    首先是 parentNode 属性,这个属性好理解,就是在 DOM 层次结构定义的上下级关系,如果元素A包含元素B,那么元素B就可以通过 parentElement 属性来获取元素A. 要明白 off ...

  7. 面试问题5:const 与 define 宏定义之间的区别

    问题描述:const 与 define 宏定义之间的区别 (1) 编译器处理方式不同     define宏是在预处理阶段展开:     const常量是编译运行阶段使用: (2) 类型和安全检查不同 ...

  8. 关于背景图相对父容器垂直居中问题 —— vertical-align 和 line-height 之间的区别

       html css <div class="register-wrapper"> <div class="register"> &l ...

  9. 转:WCF、WebAPI、WCFREST、WebService之间的区别

    WCF.WebAPI.WCFREST.WebService之间的区别   注明:转载 在.net平台下,有大量的技术让你创建一个HTTP服务,像Web Service,WCF,现在又出了Web API ...

随机推荐

  1. perl next和last

    跳出控制结构:next和last next 和last 操作符运维你在循环中改变程序执行的方向,你可能经常会遇到一些的特殊情况, 碰到这种情况时你希望跳过它,或者像退出循环. 比如当你处理Unix 账 ...

  2. Android中Input型输入设备驱动原理分析<一>

    话说Android中Event输入设备驱动原理分析还不如说Linux输入子系统呢,反正这个是没变的,在android的底层开发中对于Linux的基本驱动程序设计还是没变的,当然Android底层机制也 ...

  3. [转] Windows下使用Python读取Excel表格数据

    http://www.python-excel.org/这个网站罗列了很多关于在Python下操作Excel文件的信息,这里选择了其介绍的第一个模块xlrd . xlrd 0.9.2版本跨平台同时支持 ...

  4. JavaBean个人总结

    JavaBean在JSP程序中的应用 JavaBean是为Java语言设计的软件组件模型,具有可重复使用和跨平台的特点.可以通过JavaBean来封装业务逻辑,进行数据库操作等,从而很好的实现业务逻辑 ...

  5. CSS那些事儿-阅读随笔3(清除浮动)

    浮动主要是由浮动(float)属性导致的页面错位现象,清除浮动不仅能解决页面错位的现象,还可以解决子元素浮动导致父元素背景无法自适应子元素高度的问题.在CSS样式中,主要利用clear属性中的both ...

  6. POJ 2586 Y2K Accounting Bug(贪心)

    题目连接:http://poj.org/problem?id=2586 题意:次(1-5.2-6.3-7.4-8.5-9.6-10.7-11.8-12),次统计的结果全部是亏空(盈利-亏空<0) ...

  7. FormsAuthentication实现单点登录

    原文地址:http://www.wlm.so/Article/Detail/lmb48bk9f690n00000 单点登录,这种在网络非常常见,在这里讨论的是实现同一主域下的子站间的单点登录,同样也适 ...

  8. BZOJ2140: 稳定婚姻

    题解: 题意就是求二分图的必须边. 我们有结论: 在残量网络上跑tarjan,对于一条边(u,v) 如果该边满流||scc[u]==scc[v],那么该边是可行边. 因为如果scc[u]==scc[v ...

  9. 浅谈JavaBean,Entity Bean,Enterprise Bean等Bean以及POJO的含义

      一.对于java bean,就是一个java模型组件,他为使用java类提供了一种标准的格式,在用户程序和可视化管理工具中可以自动获得这种具有标准格式的类的信息,并能够创建和管理这些类.  jav ...

  10. sharepoint 2010 如何给文档库或自定义列表添加评论功能

    转:http://www.cfanz.cn/?c=article&a=read&id=40924 最近公司在知识库中,有一个需求,就是想要给文档添加评论功能,在sharepoint 2 ...