iOS关于RunLoop和Timer】的更多相关文章

RunLoop这个东西,其实我们一直在用,但一直没有很好地理解它,或者甚至没有知道它的存在.RunLoop可以说是每个线程都有的一个对象,是用来接受事件和分配任务的loop.永远不要手动创建一个runloop,它是跟随着每个线程的.一个RunLoop接收两种source的事件:input source和timer source.同时必须知道的是,input source,runloop是异步交付的,而timer source是同步交付的.每个runloop都有一个RunLoop Modes,代表…
什么是RunLoop? 从字面上来看是运行循环的意思. 内部就是一个do{}while循环,在这个循环里内部不断的处理各种任务(比如:source/timer/Observer) RunLoop的存在其实就是为线程而存在的.线程的作用就是执行一个特定的任务,但是默认情况下线程执行完任务后就不能再次执行任务,这是因为默认情况下线程是没有开启RunLoop的.如果开启RunLoop之后,线程执行完任务之后,会一直等待,直到再次接受到任务,接续执行任务.线程销毁前,会先释放这个线程所对应的RunLoo…
网上关于runloop的文章不计其数,再此,贴个自认为讲的比较简单明了的文章 http://www.jianshu.com/p/536184bfd163 个人理解: ios的runloop应该是类似于线程之间的消息监听+队列(队列于外部不透明,支持多重send消息模式,perform selector,timer,UI事件等等)和android的Looper非常相似,和windows的消息循环也很类似,具体底层实现不关注,直接贴测试代码 #import "ViewController.h&quo…
一:RunLoop的应用 #import "ViewController.h" @interface ViewController () /** 注释 */ @property (nonatomic, strong) NSThread *thread; @end @implementation ViewController /** * 1:用NSThread创建线程的时候,不要忘记调用start方法来开启线程,在一条线程中的任务执行的顺序是同步的,串行执行,并且当线程中的任务执行完毕后…
1.RunLoop 1)运行循环: 运行循环在 iOS 开发中几乎不用,但是概念的理解却非常重要. 同一个方法中的代码一般都在同一个运行循环中执行,运行循环监听 UI 界面的修改事件,待本次运行循环结束时,统一将界面的修改渲染出来. 点击事件触发结束后立即结束本次运行循环. 作用: 保证程序不退出. 负责监听所有事件,例如:手势触摸,时钟触发,网络加载数据完成等. 特性: 没有事件时,会休眠(省电),一旦监听到事件,会立即响应. 每一个线程都有一个 runloop,但是只有主线程的 runloo…
最近处于离职状态,时间也多了起来,但是学习还是不能放松,今天总结一下RunLoop,RunLoop属于iOS系统层的东西,还是比较重要的. 一.什么是RunLoop 字面意思看是跑圈,也可以看作运行循环,我认为RunLoop是个强大的while循环,需要的时候可以将其唤醒工作,不需要的时候可以让其进行休眠节省资源. 那它又有什么作用呢,我总结主要有三点:(1)保持程序的持续运行(2)处理App中的各种事件(比如触摸事件.定时器事件.Selector事件)(3)节省cpu资源,提高程序性能,该做事…
RunLoop是iOS线程相关的比较重要的一个概念,无论是主线程还是子线程,都对应一个RunLoop,如果没有RunLoop,线程会马上被系统回收. 本文主要CFRunLoop的源码解析,并简单阐述一下CFRunLoop的原理. CFRunLoop是开源的,开源地址在:http://opensource.apple.com/tarballs/CF/ 先看一张图,这是主线程的RunLoop调用函数截图: 我们找到相应的CFRunLoop源码: void CFRunLoopRun(void) { /…
不知道大家有没有想过这个问题,一个应用开始运行以后放在那里,如果不对它进行任何操作,这个应用就像静止了一样,不会自发的有任何动作发生,但是如果我们点击界面上的一个按钮,这个时候就会有对应的按钮响应事件发生.给我们的感觉就像应用一直处于随时待命的状态,在没人操作的时候它一直在休息,在让它干活的时候,它就能立刻响应.其实,这就是run loop的功劳. 一.线程与run loop 1.1 线程任务的类型 再来说说线程.有些线程执行的任务是一条直线,起点到终点:而另一些线程要干的活则是一个圆,不断循环…
一:RunLoop的简单介绍 #import "ViewController.h" @interface ViewController () @end @implementation ViewController /** * 1:Runloop和线程的关系:1:一一对应,主线程的runloop已经默认创建,但是子线程的需要手动创建:创建子线程的runloop: NSRunLoop *run = [NSRunLoop currentRunLoop];currentRunLoop懒加载的,…
RunLoop概念 运行循环,一个 run loop 就是一个事件处理的循环,用来不停的调度工作以及处理事件 作用 保持程序的持续运行 监听处理App中的各种事件(触摸事件,定时器事件,selector事件) 节省CPU资源,提高程序性能:该做事时做事,该休息时休息 一次RunLoop循环负责绘制屏幕上所有的点 入口函数 int main(int argc, char * argv[]) { @autoreleasepool { return UIApplicationMain(argc, ar…