[iOS RunLoop初识](一)

来源:互联网 发布:域名投资 编辑:程序博客网 时间:2024/05/19 10:08

前言

RunLoop是iOS/OS开发中比较基础的一个概念,在苹果开发中用在事件处理,延迟加载,屏幕刷新等功能的处理,其实抛开语言,RunLoop是一个的架构模式,也就是RunLoop不仅仅局限于iOS开发。

RunLoop的概念

一般来讲,一个线程一次只能执行一个任务,执行完成后线程就会退出。如果我们需要一个机制,让线程能随时处理事件但并不退出

RunLoop与线程

每条线程都有唯一的一个与之对应的RunLoop对象, 主线程的RunLoop已经自动创建好了,子线程的RunLoop需要主动创建RunLoop在第一次获取时创建,在线程结束时销毁.

为什么要使用runloop

1. 使程序一直运行接受用户输入 2. 决定程序在何时应该处理哪些Event 3. 调用解耦(对于编程经验为0的完全没搞懂这个意思,解释为Message Queue) 4. 节省CPU时间

NSRunLoop 和 CFRunLoopRef

CFRunLoopRef 是在 CoreFoundation 框架内的,它提供了纯 C 函数的 API,所有这些 API 都是线程安全的。NSRunLoop 是基于 CFRunLoopRef 的封装,提供了面向对象的 API,但是这些 API 不是线程安全的。CFRunLoopRef 的代码是开源的 :这里下载 ` http://opensource.apple.com/tarballs/CF/CF-855.17.tar.gz`整个 CoreFoundation 的源码

RunLoop的内部实现原理

实际上 RunLoop 就是一个函数,其内部是一个 do-while 循环。当你调用 CFRunLoopRun() 时,线程就会一直停留在这个循环里;直到超时或被手动停止,该函数才会返回。
2 0
原创粉丝点击