iOS 子线程用runloop保活的一个方案
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS 子线程用runloop保活的一个方案相关的知识,希望对你有一定的参考价值。
参考技术A 在我们需要频繁地开启子线程执行操作的时候,我们可以采用开启子线程runloop的方式保活子线程,这样避免频繁创建线程销毁线程的开销。具体的保活方式.
使用时
关键点:
Runloop是一个运行循环,与线程是一一对应的关系,线程中有runloop或者自己定义的循环运行时,子线程就不会被销毁,主线程中Runloop是默认开启的;runloop是系统提供的运行循环,相比自己手动写while循环,有以下几个优点:
下面的runloop的本质结构:
有几件事情需要说明一下:
官网显示的是5种,我们需要关心的就是:Default模式、tracking模式、Common模式。 NSRunloop简单细说(六)—— 几种循环模式详细解析
7种状态:即将进入、即将处理timer、即将处理source、即将进入休眠、从休眠中唤醒、退出runloop、AllActivities。
/* Run Loop Observer Activities */
typedef CF_OPTIONS(CFOptionFlags, CFRunLoopActivity)
kCFRunLoopEntry = (1UL << 0),
kCFRunLoopBeforeTimers = (1UL << 1),
kCFRunLoopBeforeSources = (1UL << 2),
kCFRunLoopBeforeWaiting = (1UL << 5),
kCFRunLoopAfterWaiting = (1UL << 6),
kCFRunLoopExit = (1UL << 7),
kCFRunLoopAllActivities = 0x0FFFFFFFU
;
Runloop运行的时候是开启了一个do..while循环,执行一个循环时首先处理完Observer、Source0、Source1、timer,然后调用系统的休眠函数等待被唤醒,最后在唤醒时继续处理事件再次进入循环。 Runloop的内部结构与运行原理
推荐阅读:
博客: NSRunloop简单细说(六)—— 几种循环模式详细解析
官方文档: Runloop官方文档
源码: CF框架源码
以上是关于iOS 子线程用runloop保活的一个方案的主要内容,如果未能解决你的问题,请参考以下文章