Run Loop

理解
进程是一家工厂,线程是一个流水线,Run Loop就是流水线上的主管;当工厂接到商家的订单分配给这个流水线时,Run Loop就启动这个流水线,让流水线动起来,生产产品;当产品生产完毕时,Run Loop就会暂时停下流水线,节约资源。
RunLoop管理流水线,流水线才不会因为无所事事被工厂销毁;而不需要流水线时,就会辞退RunLoop这个主管,即退出线程,把所有资源释放。

RunLoop并不是iOS平台的专属概念,在任何平台的多线程编程中,为控制线程的生命周期,接收处理异步消息都需要类似RunLoop的循环机制实现,Android的Looper就是类似的机制。

何时使用RunLoop?
仅当在为你的程序创建辅助线程的时候,你才需要显式运行一个runloop。Runloop是程序主线程基础设施的关键部分。所以,Cocoa程序提供了代码运行主程序的循环并自动启动runloop。iOS程序中UIApplication的run方法作为程序启动步骤的一部分,它在程序正常启动的时候就会启动程序的主循环。如果你使用Xcode提供的模板创建你的程序,那你永远不需要自己去显式的调用这些例程。
对于辅助线程,你需要判断一个runloop是否是必须的。如果是必须的,那么你要自己配置并启动它。你不需要在任何情况下都去启动一个线程的runloop。比如,你使用线程来处理一个预先定义的长时间运行的任务时,你应该避免启动runloop。Runloop在你要和线程有更多的交互时才需要,比如以下情况:
1.使用端口或自定义输入源来和其他线程通信。 AFNetworking中的子线程_networkRequestThread就是通过使用端口NSMachPort加入到runloop中的。
2.使用线程的定时器。一般就是加入到CommonMode模式的runloop中。
3.Cocoa中使用任何performSelector...的方法。
4.使线程周期性工作。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 从事iOS编程1年,一直没搞懂RunLoop原理,不知道大家有没有想过这个问题,一个应用开始运行以后放在那...
    DeerRun阅读 4,392评论 0 8
  • 做了一年多的IOS开发,对IOS和Objective-C深层次的了解还十分有限,大多还停留在会用API的级别,这是...
    韩七夏阅读 2,224评论 0 0
  • 前言 不知道大家有没有想过这个问题,一个应用开始运行以后放在那里,如果不对它进行任何操作,这个应用就像静止了一样,...
    翻炒吧蛋滚饭阅读 4,322评论 1 2
  • 最近这几天研究了下Runloop,下面就来分享一下心得(有不好的地方请帮忙指出来,共同进步,谢谢!!!) 一:前...
    Small_Potato阅读 4,643评论 1 11
  • 图文/王學藝 在摄影已成为全民运动和人们生活一部分的今天,再像过去的摄影稀缺时代那样,随便拍张照片就会引起大众围观...
    王学艺阅读 7,440评论 1 25