RunLoop

RunLoop

runloop是用来处理事件的循环。NSRunloop是CFRunloop的封装,CFRunloop是一套C接口。
runloop处理消息的流程是“接收消息->恢复活跃->处理消息->进入休眠”。
在runloop中,有多个运行模式,但是只能选择一种模式运行,mode中至少有一个timer或者是source。
Mode:系统默认注册5个Mode
kCFRunLoopDefaultMode:App默认Mode,通常来说主线程在这个Mode下运行
UITrackingRunLoopMode:界面跟踪Mode,用于scrollView的跟踪,触摸滑动保证滑动时不受其他Mode影响
kCFRunLoopCommonModes:占位用的Mode,不是真正的Mode
NSRunLoopCommonModes:相当于kCFRunLoopDefaultMode+UITrackingRunLoopMode
UIInitializationRunLoopMode:刚启动App时会进入的第一个Mode,启动完成之后不再使用
GSEventReceiveRunLoopMode:接受系统时间的内部Mode

runloop作用

1.保持程序持续运行,程序一启动就会开一个主线程,主线程一开起来就会跑一个主线程对应的RunLoop,RunLoop保证主线程不会被销毁,也就保证了程序的持续运行
2.处理App中的各种事件(比如:触摸事件,定时器事件,Selector事件等)
3.节省CPU资源,提高程序性能,程序运行起来时,当什么操作都没有做的时候,RunLoop就告诉CPU,现在没有事情做,我要去休息,这时CPU就会将其资源释放出来去做其他的事情,当有事情做的时候RunLoop就会立马起来去做事情。

一、RunLoop和线程的关系

1.runLoop和线程是一一对应的,主线程的runloop已经创建,子线程的runloop必须手动创建。
2.runloop在第一次获取时创建,在线程结束时销毁。

二、RunLoop和自动释放池

1.自动释放池会在启动runloop的时候创建
2.自动释放池会在启动runloop退出的时候释放
3.当runloop即将进入休眠时会销毁之前的释放池,并重新创建一个新的

总的来说,runloop和自动释放池都是为线程服务的。runloop可以使线程进入休眠和保活,以此可以节省cpu资源,而自动释放池是为了资源的回收释放。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值