Runloop总结

Runloop

用户态, 内核态???什么意思 machport是什么?

什么是runloop?

runloop是通过内部维护的事件循环来对事件/消息进行管理的一个对象

事件循环是什么?(要回答出切换状态)

.没有消息需要处理时, 会发生一个从用户态到内核态的切换, 休眠以避免资源占用(不是简单的,while do..while循环)   

.有消息需要处理时,会发生一个从内核态到用户态的切换.立刻被唤醒


我们的main函数为什么能保持不退出?

在main函数中所调用的UIApplicationMain, 在这个函数内部, 会启动主线程的runloop, 而runloop

是一种对事件循环的维护机制,可以做到有事做的时候去做事, 没有事情做的时候, 会通过用户态到内核态的切换, 从而避免资源的占用,然后当前线程是处于一个休眠的状态.


NSRunloopfoundation框架中的, CFRunloopcorefoundation框架中是开源的





免费桥转换


检测时间点要记住  含义??? 




runloopmodel的关系如上 

runloop启动之后会发送一个消息给观察者它要即将启动, (]表示需要发送通知的消息)

之后runloop发送处理timer/source0的事件通知, 之后在进行处理source0, source1需要处理时, 会通过goto语句跳去处理,处理唤醒时收到的消息, 如果没有则线程发送一个将要休眠的通知给Observa, 然后发生了一个从用户态到内核态的切换, 线程正式进行休眠.

唤醒的条件

source1, timer事件的回调, 外部手动事件的唤醒

线程被唤醒之后, 会通知观察者当前线程被唤醒了, 然后处理唤醒时所处理的消息, 然后回到处理timer/source0事件, 然后依次向下执行


程序从点击一个图标, 到启动, 运行, 到被杀死, 系统发生了什么?

调用main函数之后, 会调用UIApplicationMain函数, 在这个函数中, 会启动主线程的runloop,然后经过一系列的处理, 主线程的runloop处于休眠状态,如果此时点击一个屏幕, 会产生一个machport, 基于machport,最终转成一个sorce1, 唤醒主线程,运行, 处理,然后处理,当把程序杀死, 会发生runloop的一个退出.runloop会发送一个即将退出的通知, 然后runloop退出之后, 线程也就销毁掉了.



runlooptimer看笔记本上面的


怎样实现一个常驻线程


在用户进行滑动的时候, 是运行在UITrackingMode中, 一般网络请求是在子线程中进行的, 子线程返回给主线程的数据抛给主线程用来更新UI, 这个时候,把子线程抛给主线程的逻辑包装起来, 提交到主线程的UIDefaultMode中, (performSelector:onThread:witgObject:waitUntilDone:modes:)滑动在UITracking模式下面, 这个提交到default模式下的任务便不会处理,当滑动停止之后, 这个model会切换到default模式下, 这个时候就会处理子线程给主线程的任务, 这样就不会打断用户的操作.


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章