iOS 开源库源码分析之状态机TransitionKit
状态机
有限状态机(finite-state machine),简称状态机。它有几个特征
- 状态(state)总数是有限的
- 任意时刻,只处在一种状态之中
- 某种条件下,会从一种状态转变(transition)到另一种状态
状态机能够很好的管理复杂业务。在电商场景(订单,物流,售后),社交(IM消息投递),播放等都可以有很好的应用。适用于有一个明确 且复杂的状态流的场景。状态机能够很好的提高代码的可维护性和可测试性。
TKState
表示状态对象
里面会定义state的name以及四个重要的block(willEnter,didEnter,willExit,didExit)
TKEvent
表示事件对象
目标状态destinationState
定义有哪些可以到达目标状态的来源状态sourceStates
以及是三个重要的block(shouldFireEvent,willFireEvent,didFireEvent)
TKTransition
一个事件中状态转换的对象
主要有事件对象,来源state
TKStateMachine
状态机对象
管理状态相关东西,
- initialState,初始化的状态
- states,所有的状态
- currentState,当前的状态
管理事件相关的东西
- events,所有的的事件
- 添加事件
状态机相关的方法
activate方法,激活状态机,这个时候进入初始状态
canFireEvent方法,判断当前state是否在event的来源state数组中。
fireEvent: userInfo: error:方法,执行的内容包括下面
判断状态机激活
- 判断当前state是否在event的来源state数组中
- 构造TKTransition对象
- 调用event和state的相关回调