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(Run + Loop)循环运行)