什么是runloop?
一个runloop就是一个事件处理的循环,用来不停的调度工作以及处理输入事件。使用run loop的目的是让你的线程在有工作的时候忙于工作,而没工作的时候处于休眠状,减少cpu做无谓的空转,以节约电量。
run loop和线程是紧密相连的,可以这样说run loop是为了线程而生,没有线程,它就没有存在的必要。有些线程执行的任务是一条线段,起点到终点;而另一些线程要干的活则是一个圆,不断循环,直到通过某种方式将它终止。在IOS中,圆型的线程就是通过run loop不停的循环实现的。
runloop使用场景简单举例
• 实现自动释放池
在使用手动的内存管理方式的项目中,会经常用到很多自动释放的对象,如果这些对象不能够被即时释放掉,会造成内存占用量急剧增大。Run loop就为我们做了这样的工作,每当一个运行循环结束的时候,它都会释放一次autorelease pool,同时pool中的所有自动释放类型变量都会被释放掉。
• 触摸事件
Runloop可以在loop在循环中的同时响应其他输入源,比如界面控件的按钮,手势等,而不用等待当前线程结束。

• 延迟回调
Runloop可以阻塞线程,等待其他线程执行后再执行。

•屏幕刷新
TableView中实现平滑滚动延迟加载图片,利用CFRunLoopMode的特性,可以将图片的加载放到NSDefaultRunLoopMode的mode里,这样在滚动UITrackingRunLoopMode这个mode时不会被加载而影响到。

工作已经有两年了,平常忙于工作几乎不总结知识,而且对于一个代码搬运工来说,现在真是一个瓶颈。所以利用简书平台,一方面记录知识,另一方给大家分享交流学习。很多资料也是网上查询的,也是很模糊,希望接下来继续完善,坚持记录,坚持学习,,同时不对的,也欢迎指正☺︎☺︎
网友评论