2019-01-22

本文深入探讨了iOS中的事件处理机制,包括触摸事件的处理流程和原则,以及进程与线程的概念和工作原理。解释了事件响应链、事件分发和响应的过程,同时对比了进程和线程的区别,分析了线程在资源管理和调度中的作用。
1、UIView同时设置touchHandler&GR(仅考虑单击事件),调用顺序是什么?

iOS 事件分为三大类

触摸事件
加速器事件
远程控制事件

触摸事件是我们平时遇到最多的事件,例如单击、长按、滑动等等。当用户点击按钮,到按钮处理回调。整个过程是如何发生,需要什么样的原则,这些都是问题。为了使系统能更加鲜明符合用户的操作逻辑,iOS系统将事件相应过程拆分成两部分:1.寻找响应链;2.事件响应。先将事件通过某种规则来分发,找到处理事件的控件。其次是将事件传递分发,响应。

2、进程和线程:

进程:
就是进行中的程序(一组指令的有序集合),当一个程序被加载到内存中之后就变成了进程(进程=程序+执行)。进程有独立的地址空间,在保护模式下自己出了问题不会对其他进程产生影响。进程是操作系统分配资源的基本单位。 进程的三种状态:

  • 阻塞态:等待某个事件的完成
  • 就绪态:等待系统分配CPU以便运行
  • 执行态:占有CPU正在运行
3446786-d496743417957776.png

线程:
是进程的一个实体,是CPU调度和分派的基本单位,自己拥有一点运行必不可少的资源(如程序计数器、一组寄存器和堆栈)与同属进程的其他线程共享进程的拥有的全部资源。

3446786-8040dac38575159e.png
  • 进程是cpu资源分配的最小单位,线程是cpu调度的最小单位。
  • 一个程序至少有一个进程,一个进程至少有一个线程。线程依赖于进程才能运行
  • 线程本身拥有很少资源(线程标识符、程序计数器、一组寄存器的值、堆栈),与同属进程的其他线程共享进程拥有的资源(代码段、数据段、打开的文件、I/O设备等)。
  • 线程开销小,但一个线程死掉等于整个进程死掉,不利于资源管理和保护。而进程正好相反,开销大,但相对线程安全。

线程对操作系统来说就是一段代码+运行时数据(主要是寄存器数据,还有线程中与资源相关的数据,比如打开的文件句柄)。多线程实现主要是靠硬件CPU(中央处理器)件来实现的,CPU有一个很重要的特性时间片,每一段获得CPU的代码只能运行一个时间片限定的时间,时间到后CPU就会把正在运行的代码暂停,接着发生一个中断,然后按照一定的规则选择另一段代码获得CPU来运行。
时间片设得太短会导致过多的进程切换,降低了CPU效率;而设得太长又可能引起对短的交互请求的响应变差。将时间片设为100毫秒通常是一个比较合理的折衷。
线程多了,可以提高程序的执行效率,但并不是越多越好。

虽然线程本身拥有很少的资源(在iOS中,默认主线程1M,子线程512K),但是更多的线程意味着更多的内存开销。创建线程也是需要CPU开销的。
如果线程比核的数量多,则同一时间只能执行与核数量相等的线程数,线程过多会导致频繁的切换,消耗过多的CPU时间,降低了程序性能。
使用多线程就可能出现线程安全问题,为了解决线程安全需要使用锁,进而可能会出现死锁问题。过多的线程会增加程序设计的复杂性,浪费更多精力去处理多线程通信和数据共享(多线程安全、多线程死锁)。

标题基于SpringBoot的马术俱乐部管理系统设计与实现AI更换标题第1章引言介绍马术俱乐部管理系统的研究背景、意义、国内外研究现状、论文方法及创新点。1.1研究背景与意义阐述马术俱乐部管理系统对提升俱乐部管理效率的重要性。1.2国内外研究现状分析国内外马术俱乐部管理系统的发展现状及存在的问题。1.3研究方法以及创新点概述本文采用的研究方法,包括SpringBoot框架的应用,以及系统的创新点。第2章相关理论总结和评述与马术俱乐部管理系统相关的现有理论。2.1SpringBoot框架理论介绍SpringBoot框架的基本原理、特点及其在Web开发中的应用。2.2数据库设计理论阐述数据库设计的基本原则、方法以及在管理系统中的应用。2.3马术俱乐部管理理论概述马术俱乐部管理的基本理论,包括会员管理、课程安排等。第3章系统设计详细描述马术俱乐部管理系统的设计方案,包括架构设计、功能模块设计等。3.1系统架构设计给出系统的整体架构,包括前端、后端和数据库的交互方式。3.2功能模块设计详细介绍系统的各个功能模块,如会员管理、课程管理、预约管理等。3.3数据库设计阐述数据库的设计方案,包括表结构、字段设计以及数据关系。第4章系统实现介绍马术俱乐部管理系统的实现过程,包括开发环境、编码实现等。4.1开发环境搭建介绍系统开发所需的环境,包括操作系统、开发工具等。4.2编码实现详细介绍系统各个功能模块的编码实现过程。4.3系统测试与调试阐述系统的测试方法、测试用例以及调试过程。第5章系统应用与分析呈现马术俱乐部管理系统的应用效果,并进行性能分析。5.1系统应用情况介绍系统在马术俱乐部中的实际应用情况。5.2系统性能分析从响应时间、并发处理能力等方面对系统性能进行分析。5.3用户反馈与改进收集用户反馈,提出系统改进建议。第6章结论与展望总结马术俱乐部管理系统的设计与实现成果,并展望未来的研究
### Mysql DATETIME 类型的时间格式化行为 Mysql 的 `DATETIME` 数据类型用于存储日期和时间的组合值,其标准格式为 `'YYYY-MM-DD HH:MM:SS'`[^3]。当不同的时间字符串被插入到数据库中时,Mysql 会尝试将其解析并转换为该标准格式。 #### 时间字符串的自动解析机制 Mysql 提供了一种灵活的时间字符串解析功能。如果输入的时间字符串可以被识别为有效的日期或时间,则 Mysql 会在内部执行必要的转换操作以匹配 `DATETIME` 或其他时间类型的预期格式。这种解析过程依赖于以下几个因素: 1. **输入字符串的有效性** 输入的时间字符串必须能够表示一个合法的日期或时间值。例如,`'2023-10-05 14:30:00'` 是有效的时间字符串,而 `'invalid-date'` 则无法被解析[^1]。 2. **隐式转换规则** 如果提供了不完全符合标准格式的时间字符串(如 `'20231005'`),Mysql 会尝试通过内置逻辑对其进行解释。具体来说,它可能会假设某些分隔符的存在或将部分字段映射到默认值。例如: - 字符串 `'20231005'` 可能会被解释为 `'2023-10-05 00:00:00'`。 - 若仅提供日期部分(如 `'2023-10-05'`),则时间部分可能被设置为午夜 (`'00:00:00'`)。 3. **区域与时区的影响** 在处理时间数据时,服务器所在的时区配置也会影响最终的结果。例如,默认情况下,未指定时区的时间戳通常会被视为本地时间,并在必要时调整为 UTC 进行存储。 #### Java 中的时间插入与格式化 在 Java 应用程序中,可以通过多种方式将时间数据写入 MySQL 数据库。以下是两种常见的方法及其对应的格式化行为: 1. **使用 `PreparedStatement` 和 `Timestamp` 对象** 当利用 JDBC API 向数据库传递参数化的查询语句时,推荐直接传入 `java.sql.Timestamp` 实例而非原始字符串形式的时间值。这样做的好处在于避免手动格式化带来的潜在错误,并确保跨平台一致性。例如: ```java java.util.Date date = new java.util.Date(); Timestamp timestamp = new Timestamp(date.getTime()); PreparedStatement pstmt = connection.prepareStatement("INSERT INTO table_name (gmt_modified) VALUES (?)"); pstmt.setTimestamp(1, timestamp); ``` 2. **字符串拼接的方式** 虽然这种方法不如前者安全可靠,但在特定场景下仍然可行。需要注意的是,在此过程中应严格遵循目标列的数据类型所期望的格式要求。比如对于 `DATETIME` 列而言,应当采用形似 `'YYYY-MM-DD HH:MM:SS'` 的表达模式[^2]。 #### 总结 综上所述,无论初始输入为何种样式的时间表述,只要满足基本可辨识条件,经过 Mysql 自身的一系列规范化流程之后均有望转化为统一的标准形态——即前述提及之 `'YYYY-MM-DD HH:MM:SS'` 形态。 ```sql -- 创建测试表结构 CREATE TABLE test_datetime ( id INT PRIMARY KEY AUTO_INCREMENT, gmt_created TIMESTAMP DEFAULT CURRENT_TIMESTAMP, custom_time DATETIME NOT NULL ); -- 插入不同样式的记录 INSERT INTO test_datetime(custom_time) VALUES ('2023-10-05'); INSERT INTO test_datetime(custom_time) VALUES ('20231005'); INSERT INTO test_datetime(custom_time) VALUES ('2023-10-05T14:30:00Z'); -- ISO 8601 格式 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值