2019-01-22

2019-01-23  本文已影响0人  言己言

1、UIView同时设置touchHandler&GR(仅考虑单击事件),调用顺序是什么?

iOS 事件分为三大类

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

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

2、进程和线程:

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

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

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

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

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

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

上一篇下一篇

猜你喜欢

热点阅读