应用主运行循环负责处理所有用户相关的事件。UIApplication对象在应用启动时安装主运行循环并且使用此循环去处理事件和处理基于视图的界面更新。正如名字所表明的,该主运行循环是在应用的主线程app's main thread中运行的。以此保证所有用户事件是按照它们被接收时的顺序串行的执行。

下图展示了主运行循环的结构以及用户事件如何导致了应用行为。当用户和应用交互时,和这些交互相关的事件由系统自动产生并且借助UIKit设定的特殊端口传递给应用。事件在应用内部以队列的形式存在并且一个一个的被分发到应用的主运行循环去执行。UIApplication对象是第一个接收事件的对象,并且决定需要如何处理事件。触控事件通常被分发到应用的主窗口对象,并且最终分发到发生该触控事件的视图上面。其它的事件传递也许会经过各种各样的应用对象而与触控事件传递稍微有所不同。

在iOS应用中可以传递很多类型的事件。最常见的事件列在下表中:

这些事件类型中的大部分通过应用的主运行循环进行传递,但是还有一些并不是的。例如:accelerometer事件直接被传递到应用指定的accelerometer代理对像。关于系统如何处理大多数类型事件,包括touch、remote control、motion、accelerometer,以及gyroscopic事件,详见Event Handling Guide for iOS.

一些像触控、远程控制类的事件,通常被应用的响应对象处理。响应对象存在于应用的任何地方。(UIApplication对象,view对象,view controller对象等等都是响应对象的例子)。大多数事件是以特定的响应对象为目标,但是也可以被传递给其它的响应对象(借助响应链),例如:一个不处理任何事件的view可以将事件传递给它的父view或传递给view controller。

发生在controls类的视图(例如button)上的事件的处理过程和发生在其它类型的views上的触控事件处理过程有些不一样。因为发生在control类的对象上面的交互行为只有非常有限的几种,因此这些交互重新打包进active message并且传递给合适的目标对象。  这种target-action的设计模式,使应用通过control类型的view对象去触发一段自定义代码的执行变得非常容易。

转载于:https://www.cnblogs.com/gatsbywang/p/4338971.html

主运行循环main run loop的一些理解相关推荐

  1. 运行循环(Run Loops)

    运行循环是与线程相关的基础工具的一部分.运行循环是一个用来安排工作并协调传入事件接收的一个事件处理循环.运行循环的目的是当需要工作的时候,让你的线程处于忙碌状态:当没有工作时,让你的线程处于睡眠状态. ...

  2. NSThread Run Loop

    2019独角兽企业重金招聘Python工程师标准>>> 前言 多线程的价值无需赘述,对于App性能和用户体验都有着至关重要的意义,在iOS开发中,Apple提供了不同的技术支持多线程 ...

  3. ios跨线程通知_iOS多线程编程指南(三)Run Loop

    Run loops是线程相关的的基础框架的一部分.一个run loop就是一个事件处理的循环,用来不停的调度工作以及处理输入事件.使用run loop的目的是让你的线程在有工作的时候忙于工作,而没工作 ...

  4. iOS Run Loop

    http://www.cnblogs.com/scorpiozj/ Run loops是线程的基础架构部分.一个run loop就是一个事件处理循环,用来不停的调配工作以及处理输入事件.使用run l ...

  5. 再读苹果《Threading Programming Guide》笔记(二):线程配置与Run Loop

    本文为再读苹果<Threading Programming Guide>笔记第二篇,作者付宇轩表示:如今关于iOS多线程的文章层出不穷,但我觉得若想更好的领会各个实践者的文章,应该先仔细读 ...

  6. Glib学习(22) 主事件循环 The Main Event Loop

    glib源码下载:http://ftp.gnome.org/pub/gnome/sources/glib/ glib帮助文档:https://developer.gnome.org/glib/ 主事件 ...

  7. 七、GLib主要的事件循环(The Main Event Loop)

    1 GMainLoop.GMainContext.GSource 1.1 三者之间关系 GMainLoop -> GMainContext -> {GSource1, GSource2,G ...

  8. run loop详解

    不知道大家有没有想过这个问题,一个应用开始运行以后放在那里,如果不对它进行任何操作,这个应用就像静止了一样,不会自发的有任何动作发生,但是如果我们点击界面上的一个按钮,这个时候就会有对应的按钮响应事件 ...

  9. Objective-C之run loop详解

    做了一年多的IOS开发,对IOS和Objective-C深层次的了解还十分有限,大多还停留在会用API的级别,这是件挺可悲的事情.想学好一门语言还是需要深层次的了解它,这样才能在使用的时候得心应手,出 ...

最新文章

  1. Android美工坊:Selector选择器的使用
  2. 关于http301与302的技术讨论
  3. VMware workstation虚拟机不能联网解决方法
  4. 快手春节活动奖励未到账,被羊毛党投诉上了全国12315平台
  5. 大学4年毕业后我是如何还清的助学贷款。
  6. 的run代码_小心使用 Task.Run 续篇
  7. 循环char 指针_c 学习笔记 指针
  8. Spring启动过程——源码分析(finishBeanFactoryInitialization(beanFactory))
  9. 利用声子色散曲线推导刚度矩阵
  10. obs源码分析【四】:obs录制的窗口截图与视频编码
  11. 睡眠多少分钟一个循环_列出正常的睡眠周期及循环时间?
  12. mysql导出数据为txt时报错:The MySQL server is running with the --secure-file-priv option so it cannot execut
  13. K8s Kubernetes集群部署
  14. matlab 冲激偶,冲激函数符号怎么念 什么是冲激函数?
  15. Android进阶知识树——Android Handler消息机制
  16. SQL Server LocalDB本地文件数据库操作实践
  17. 如何使用CSS和JavaScript构建简单的甘特图
  18. 开发者来稿|AMD赛灵思中文论坛分享 - 提问的智慧
  19. 【文献研究】班轮联盟下合作博弈的概念
  20. GUI(用户图形界面)

热门文章

  1. 课后作业-阅读任务-阅读提问-3
  2. 游戏编程入门之碰撞检测
  3. 人工智能科学家发现 “衰老时钟”,我们的生物钟可以倒转
  4. /etc/syslog.conf文件作用
  5. 测试php连接mysql
  6. poj - 3786 Repeater
  7. Windows Azure 架构指南 – 第 1卷 发布
  8. NOIP2017 列队
  9. ViaWest公司的光纤将连接微软新的跨太平洋电缆
  10. SQL Server 2016 AlwaysOn 安装及配置介绍