原创Blog,转载请注明出处
blog.csdn.net/hello_hwc
前言:
对于一个app来说,没有办法保证每次都是用户正常关闭(双击home,然后关闭)。有可能是用户把app切换到后台,然后由于内存的原因,IOS系统选择关闭掉应用。这时候,就是状态恢复使用的场景。App应当做到的是,用户没有察觉到App在后台被IOS Kill掉了。
本文主要讲诉如何用Storyboard进行状态恢复,下一篇更新如何实现代码State Restoration。
注意:
状态恢复不是持久化存储,换句话说,用户正常关闭App的时候,状态恢复是不会起到任何作用的,因为用户正常关闭App,理所应当这次操作的状态都应该清除。
一 什么是状态相关的信息?
就是那些不容易被重新创建的信息,比如一个tableview,当前选择的是哪行?比如用户的first responser是什么?比如tabController当前选择是哪个页面。
二 如何实现保存状态信息
- (必须) app 代理的两个代理方法,要实现。通常直接返回YES即可,当然,也可以判断状态来决定是否保存和恢复。
application:shouldSaveApplicationState: application:shouldRestoreApplicationState:
- (必须)每个想要保存的视图控制器一定要有一个唯一的恢复表示符(restoration identifiers)。如果是用Storyboard上创建的,则在storyboard上设置。如果是代码创建的,使用属性restorationIdentifier 。
- (必须)对于storyboard上创建的视图控制器,不需要设置restoration classes。对于那些由代码动态创建的视图控制器,要设置restoration classes来实现保存和恢复。否则,统一在appDelegate的代理方法中实现。后一种方式不推荐。
- (推荐)实现两个方法来保存/恢复状态信息
encodeRestorableStateWithCoder:
decodeRestorableStateWithCoder:
另外,可以使用App 代理来存储版本等额外信息
application:willEncodeRestorableStateWithCoder: and application:didDecodeRestorableStateWithCoder:
三 State Restoration的流程
保存状态的流程图
恢复状态的流程图
从视图控制器的生命周期来看