Jerry Lee

stay hungry,stay young.

Welcome to my world.


深入理解runloop



RunLoop简介

运行循环,在程序运行过程中循环做一些事情,如果没有Runloop程序执行完毕就会立即退出,如果有Runloop程序就会一直运行,并且时时刻刻在等待用户的输入操作。
RunLoop可以在需要的时候自己跑起来运行,在没有操作的试试就停下来休息。充分节省CPU资源,提高程序性能。

RunLoop基本作用

1.保持程序持续运行 程序一启动就会开一个主线程,主线程一开起来就会跑一个主线程对应的RunLoop,RunLoop保证主线程不会被销毁,也就保证了程序的持续运行;

2.处理App中的各种事件 比如定时器事件,触摸事件,Selector事件;

3.节省CPU资源,提高程序性能 程序运行起来时,当什么操作都没有做的时候,Runloop就会告诉CPU,现在没有事情做,我要去休息,这时CPU就会将其资源释放出来去做其他的事情,当有事情做的时候Runloop就会立马起来去做事情。

RunLoop内部运行原理: 1434508-467259882fa87be8.png-65kB

RunLoop和线程之间的关系

1.每条线程都有唯一的一个与之对应的RunLoop对象;

2.RunLoop保存在一个全局的Dictionary里,线程作为key,RunLoop作为value;

3.主线程的RunLoop已经自动创建好了,子线程的RunLoop需要主动创建;

4.RunLoop在第一次获取时创建,在线程结束时销毁。

RunLoop启动流程

UIApplicationMain函数内启动了RunLoop,程序不会马上退出,二是保持运行状态。 因此每一个应用必须要有一个RunLoop,我们值得主线程一开起来,就会跑一个和主线程对应的RunLoop,那么RunLoop一定在程序的入口main函数中开启。

WX20190404-174047.png-41.7kB

我们看一下UIApplicationMain的API WX20190404-174129.png-58.8kB

最近的文章

设计模式 简单工厂模式

定义专门定义类(工厂类)来负责创建其他类的实例。可以根据创建方法的参数来返回不同类的实例,被创建的实例通常都具有共同的父类。简单工厂模式中定义一个抽象类,抽象类中声明公共的特征及属性,抽象子类继承自抽象类,去实现具体的操作。工厂类根据外界需求,在工厂类中创建对应的抽象子类实例并传给外界,而对象的创建是由外界决定的。外界只需要知道抽象子类对应的参数即可,而不需要知道抽象子类的创建过程,在外界使用时甚至不用引入抽象子类。简单工厂模式将抽象子类的创建,和关于抽象子类相关的业务逻辑分离,降低对象间...…

继续阅读
更早的文章

Kvo的本质

KVO的全称是Key -Value Observing,即“键值监听”,可用于监听某个对象属性值的改变代码实现结果输出可以看到我们只监听了person1属性值改变,所以只输出person1的改变。那问题来了,我们给person1,person2都改变了age属性的值,本质都是调用了LGPerson类中setAge这个方法,那么为什么person1会走到oberveValueForKeyPath这个方法,person2不会呢?KVO底层实现分析———我们断点打印一下person1和perso...…

继续阅读