码迷,mamicode.com
首页 > 其他好文 > 详细

RunLoop

时间:2016-12-01 14:05:02      阅读:176      评论:0      收藏:0      [点我收藏+]

标签:bsp   network   管理   空闲   link   程序   ansi   blog   死循环   

Event驱动  主体就是一个死循环,没事-休眠,有事-唤醒-执行  

runloop:用于解决类似你滑动了屏幕产生了多个事件,为了解耦不影响用户操作,将这些事件加入一个消息队列,这边就不用再去管理这些事件,不会影响操作也不会影响事件的执行,它会从队列中取出一个一个的执行。主线程不需要等待事件处理完成才能进行下一步操作。

1、使程序一直运行并接受用户输入

2、决定程序在何时应该处理哪些Event

3、调用解耦(Message Queue)

4、节省cpu时间,runLoop会造成类似的死循环,使CPU一直在运行,但是它可以休眠在没事的时候不会让cpu运行的机制。

技术分享

NSTimer依赖与runloop实现。

UIEvent从产生到分发都是通过runloop跑的。

Autorelease与runloop有关

CAdisplayLink 是每画一贞60ps或者30ps就回调一次。

CATransition 动画效果,push等改变frame等等的效果

CAAnimation UIView的动画效果

NSURLConnection AFNetworking delegate和网络回来的数据都是通过runloop跑的

断点时 会看到调用堆栈 (如 Thread1)堆栈里面的很多东西都是有runloop搞出来的,看的时候从底下往上看。大部分堆栈都会看到start到runloop 上面的调用可能不一样。

 

主线程或者含有runloop的线程都从一下六个之一的函数调起:

技术分享

source0:处理App内部事件,app自己负责管理(触发),如UIEvent,CFSocket

source1:由runloop和内核管理,Mach port驱动,如CFMachPort(NSPort是对它的封装)、CFMessagePort

runloop构成元素:

技术分享

 

UIkit通过RunLoopObserver在Runloop两次sleep对AutoreleasePool进行pop和push将这次Loop 中产生的Autorelease对象释放。

RunLoop在同一时间只能且必须在一种特定的Mode下Run

更换Mode时,需要停止当前loop,然后重启loop。

Mode是iOS app滑动门顺畅的关键

 

CFRunLoopMode:

NSDefaultRunLoopMode 默认状态,空闲状态,程序起来切换到这个mode,不滑动就一直是这个mode

UITrackingRunLoopMode 滑动scrollView时的Mode

UIInitializationRunLoopMode 私有 app启动时的Mode

NSRunLoopCommonModes(结构类似数组)mode集合

 

RunLoop

标签:bsp   network   管理   空闲   link   程序   ansi   blog   死循环   

原文地址:http://www.cnblogs.com/yinqianios/p/6121437.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!