RunLoop(Run + Loop)循环运行

RunLoop的两个重要的作用:

1、保证iOS程序运行后不退出(因为RunLoop是一个“死循环”,才能保证程序运行后不会退出。否则执行完main函数就直接退出。)

2、监听事件和传递事件(监听系统产生的(点击事件、拖拽事件、触摸事件。。。)所有的事件)。

RunLoop在何时创建和销毁:

当程序启动的时候,在执行main函数中的UIApplicationMain函数内部会将RunLoop对象创建出来。通过查看UIApplicationMain函数声明,该函数会返回一个int类型的值,但通过刚刚的结论,这个UIApplicationMain函数永远也不会有返回值,因为如果这个UIApplicationMain函数有返回值,那么main函数就会接收到返回值就直接退出了,这样就不能保持应用程序一直处于运行状态了。所以UIApplicationMain内部必然会创建RunLoop对象来实现永不退出的功能。结论:在程序启动的时候,在执行UIApplicationMain函数内部,系统会负责创建RunLoop对象。

RunLoop是死循环会很耗性能吗?

不会。如果没有事件需要处理的话,RunLoop就会让线程进入休眠状态;在睡眠的时候消耗的性能就非常少了。一旦有事件产生,RunLoop会立刻唤醒当前线程来处理事件。事件处理完毕之后,RunLoop会循环检测事件的到来。如果在一定的时间内没有事件产生了,RunLoop又会让线程进入休眠状态来减少开销。

每个线程都会对应一个RunLoop(主线程和子线程):

默认主线程的RunLoop是自动开启的,子线程的RunLoop是默认不开启的。若在子线程中有事件发生的时候就需要开启RunLoop;开启方法为:NSRunLoop *runLoop = [NSRunLoop currentRunLoop];

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

推荐阅读更多精彩内容

  • 概述 RunLoop作为iOS中一个基础组件和线程有着千丝万缕的关系,同时也是很多常见技术的幕后功臣。尽管在平时多...
    阳明AI阅读 4,741评论 0 17
  • 1 Runloop机制原理 深入理解RunLoop http://www.cocoachina.com/ios/2...
    Kevin_Junbaozi阅读 9,539评论 4 30
  • 一. RunLoop简介 RunLoop字面意思是跑圈,在我们的项目中其实就是运行循环,而且是充满灵性的死循环,为...
    xx_cc阅读 13,906评论 43 144
  • 一、什么是runloop 字面意思是“消息循环、运行循环”。它不是线程,但它和线程息息相关。一般来讲,一个线程一次...
    WeiHing阅读 12,528评论 11 111
  • 对世界的感知 对世界的感知有助于认识整个当前社会的发展趋势,认清自己对处于当前社会中的哪一个角落里,封闭自己就越把...
    七小调阅读 2,849评论 0 0