美文网首页
iOS runloop

iOS runloop

作者: 宗驭 | 来源:发表于2021-07-25 16:45 被阅读0次

什么是runloop
运行循环, 在程序运行过程中循环做一些事情, 类似一个圈 do while
没有runloop的话,程序执行完就直接退出了. 例如一个.m文件的编译,编译完毕如果没有while的类似循环则会打印 ....with exit code: 0 退出 程序.
作用:
1.有了它就会保持程序的持续运行
2.处理App中的各种事件
3.节省CPU资源,提高程序性能. 该做事做事,该休息休息
获取runloop对象

NSRunLoop *runloop = [NSRunLoop currentRunLoop]; //获取 当前线程的runloop
NSRunLoop *runloop = [NSRunLoop mainRunLoop];//获取主线程的runloop

runloop 和 线程之间的关系
1:每条线程都有与之对应的runloop对象
2: runloop 保存在全局的Dictionary里, 线程作为key, runloop 为value 类似: runloops[线程] = runloop
3: 线程刚创建的时候并没有runloop 对象, runloop 会在第一次获取它的时候创建

image.png

4:runloop 会在线程结束的时候销毁
5:主线程的runloop已经自动创建, 子线程默认没有开启runloop

runloop 相关的类

共5个
CFRunLoopRef
CFRunLoopModeRef
CFRunLoopSourceRef
CFRunLoopTimerRef
CFRunLoopObserverRef

CFRunLoopRef

image.png
CFRunLoopModeRef
image.png
总结如下:
1.CFRunLoopModeRef代表RunLoop的运行模式
2.一个RunLoop包含若干个Mode,每个Mode又包含若干个Source0/Source1/Timer/Observer
3.RunLoop启动时只能选择其中一个Mode,作为currentMode
4.如果需要切换Mode,只能退出当前Loop,再重新选择一个Mode进入
不同组的Source0/Source1/Timer/Observer能分隔开来,互不影响
5.如果Mode里没有任何Source0/Source1/Timer/Observer,RunLoop会立马退出

CFRunLoopModeRef

常见的2种Mode
kCFRunLoopDefaultMode(NSDefaultRunLoopMode):App的默认Mode,通常主线程是在这个Mode下运行

UITrackingRunLoopMode:界面跟踪 Mode,用于 ScrollView 追踪触摸滑动,保证界面滑动时不受其他 Mode 影响

相关文章

网友评论

      本文标题:iOS runloop

      本文链接:https://www.haomeiwen.com/subject/stbbmltx.html