一、Runloop 简介

① 什么是 Runloop ?
  • RunLoop 是事件接收和分发机制的一个实现,是线程相关的基础框架的一部分,一个 RunLoop 就是一个事件处理的循环,用来不停的调度工作以及处理输入事件。
  • Runloop 不仅仅是一个运行循环(do-while 循环),也是提供了一个入口函数的对象,消息机制处理模式,运行循环从两种不同类型的源接收事件。
  • 输入源提供异步事件,通常是来自另一个线程或来自不同应用程序的消息。定时器源提供同步事件,发生在预定时间或重复间隔。
  • 两种类型的源都使用特定于应用程序的处理程序例程来处理事件。除了处理输入源之外,Runloop 还会生成有关 Runloop 行为的通知。
  • 已注册的运行循环观察器可以接收这些通知并使用它们在线程上执行其他处理。
② Runloop 作用
  • 当启动一个 iOS APP 时主线程启动与其对应的 RunLoop 也已经开启,如果不杀掉 APP 则会一直运行,就是因为 RunLoop 循环一直为开启状态保证主线程不会被摧毁,这也是 RunLoop 的作用之一:保证线程不退出,保持程序的持续运行
  • RunLoop 在循环过程中监听事件,当前线程有任务时,唤醒当当前线程去执行任务,任务执行完成以后,使当前线程进入休眠状态。当然这里的休眠不同于我们写的死循环 while(1),它在休眠时几乎不会占用系统资源,这是由操作系统内核去负责实现的。
  • 处理 App 中的各种事件(触摸、定时器、perfor

iOS之深入解析Runloop的底层原理相关推荐

  1. iOS之深入解析类加载的底层原理:类如何加载到内存中

    一.App 启动与 dylb 加载 App 启动会由 libdyld.dylib 库先于 main 函数调用 start,执行 _dyld_start 方法,然后运用汇编实现调用 dyldbootst ...

  2. iOS之深入解析KVO的底层原理

    一.KVO 简介 ① 概念 KVO 全称 Key Value Observing,是苹果提供的一套事件通知机制,允许对象监听另一个对象特定属性的改变,并在改变时接收到事件. 由于 KVO 的实现机制, ...

  3. iOS之深入解析KVC的底层原理和自定义KVC的实现

    一.KVC 简介 ① 定义 KVC 是 Key-Value Coding 的简称,中文译义为键值编码. KVC 是指 iOS 的开发中,可以允许开发者通过 Key 名直接访问对象的属性,或者给对象的属 ...

  4. iOS之深入解析AFNetworking的底层原理

    AFNetworking 简介 一.AFNetworking 版本 AFNetworking 是 iOS 最常用的网络框架,虽然系统也有 NSURLSession ,但是一般不会直接用它.AFNetw ...

  5. iOS之深入解析渲染的底层原理

    一.计算机渲染原理 ① CPU 与 GPU 的架构 对于现代计算机系统,简单来说可以大概视作三层架构:硬件.操作系统与进程.对于移动端来说,进程就是 App,而 CPU 与 GPU 是硬件层面的重要组 ...

  6. iOS之深入解析malloc的底层原理

    一.前言 iOS 在创建对象的时候,alloc 方法有三个核心部分:cls->instanceSize(计算需要开辟内存的大小),calloc(开辟内存空间),obj->initlnsta ...

  7. iOS之深入解析YYModel的底层原理

    一.前言 YYModel 是由 ibireme 开发的一套小而精美的模型转换框架,采用分类的形式,无需继承框架的某个基类就可以方便地完成模型的转换,且内部做了自动类型转换和安全处理,可以有效地防止因模 ...

  8. iOS之深入解析“锁”的底层原理

    一.OSSpinLock(自旋锁) 自从 OSSpinLock 出现安全问题,在 iOS10 之后就被 Apple 废弃.自旋锁之所以不安全,是因为获取锁后,线程会一直处于忙等待,造成了任务的优先级反 ...

  9. iOS之深入解析GCD的底层原理

    一.队列 ① 队列实现源码分析 在源码中搜索 dispatch_queue_create 关键字,可以在 queue.c 中发现: dispatch_queue_tdispatch_queue_cre ...

最新文章

  1. Android开发之如何保证Service不被杀掉(broadcast+system/app)
  2. call dword prt[eax]
  3. Oracle 数据库版本和位数sql语句查看方法
  4. SAP用户信息查询的几张表
  5. 【深度学习】图解 9 种PyTorch中常用的学习率调整策略
  6. python测试函数
  7. spring整合mongodb集群
  8. vivadoRAM中初始化文件coe如何快速生成
  9. .net 读蓝牙数据_Linux内核曝严重蓝牙漏洞,影响多个版本
  10. 身份证验证TW WordPress
  11. 2015版的迅捷ppt转换成pdf转换器
  12. Remoting服务实例
  13. 数据分析——AB实验
  14. Pytorch:训练中断再恢复时的注意事项
  15. RuiJi Scraper 分页抽取
  16. 测绘资质分级标准-工程测量、界线与不动产测绘
  17. php 用隐藏姓名第一个字,PHP用*号替代姓名除第一个字之外的字符
  18. java文件边读边写_[Java教程]node.js 利用流实现读写同步,边读边写
  19. 虹科云课堂 | 干货不断!汽车专题直播月本周课程预告
  20. chroot用法详解

热门文章

  1. 参数NLS_LENGTH_SEMANTICS的设置问题
  2. 塔式服务器、机架式服务器、刀片服务器区别小结
  3. RHEL4-VNC服务配置
  4. Oracle Parallel Execution(并行执行) .
  5. SQL Server报错:选择列表中的列无效,因为该列没有包含在聚合函数或 GROUP BY 子句中...
  6. 2019.7.13刷题统计
  7. idea离线下载lombok,以及lobok版本不兼容
  8. leveldb 学习。
  9. Linux对文件内容基本操作(学习笔记七)
  10. sql2012包含数据库,快速生成用户tsql脚本