Swift App状态恢复-State Restoration(一)

本文详细阐述了Swift App的状态恢复过程,包括何时使用状态恢复、如何保存和恢复状态信息,以及实现步骤和Demo演示。重点讲解了Storyboard中设置restoration identifiers和代理方法的重要性,并提醒了层次结构中所有视图控制器都需要标识符才能正确恢复状态。
摘要由CSDN通过智能技术生成

原创Blog,转载请注明出处
blog.csdn.net/hello_hwc


前言:
对于一个app来说,没有办法保证每次都是用户正常关闭(双击home,然后关闭)。有可能是用户把app切换到后台,然后由于内存的原因,IOS系统选择关闭掉应用。这时候,就是状态恢复使用的场景。App应当做到的是,用户没有察觉到App在后台被IOS Kill掉了。

本文主要讲诉如何用Storyboard进行状态恢复,下一篇更新如何实现代码State Restoration。

注意:
状态恢复不是持久化存储,换句话说,用户正常关闭App的时候,状态恢复是不会起到任何作用的,因为用户正常关闭App,理所应当这次操作的状态都应该清除。


一 什么是状态相关的信息?

就是那些不容易被重新创建的信息,比如一个tableview,当前选择的是哪行?比如用户的first responser是什么?比如tabController当前选择是哪个页面。


二 如何实现保存状态信息

  1. (必须) app 代理的两个代理方法,要实现。通常直接返回YES即可,当然,也可以判断状态来决定是否保存和恢复。
    application:shouldSaveApplicationState: application:shouldRestoreApplicationState:
  2. (必须)每个想要保存的视图控制器一定要有一个唯一的恢复表示符(restoration identifiers)。如果是用Storyboard上创建的,则在storyboard上设置。如果是代码创建的,使用属性restorationIdentifier 。
  3. (必须)对于storyboard上创建的视图控制器,不需要设置restoration classes。对于那些由代码动态创建的视图控制器,要设置restoration classes来实现保存和恢复。否则,统一在appDelegate的代理方法中实现。后一种方式不推荐。
  4. (推荐)实现两个方法来保存/恢复状态信息
  encodeRestorableStateWithCoder: 
  decodeRestorableStateWithCoder: 

另外,可以使用App 代理来存储版本等额外信息

application:willEncodeRestorableStateWithCoder: and application:didDecodeRestorableStateWithCoder:

三 State Restoration的流程

保存状态的流程图
这里写图片描述

恢复状态的流程图
这里写图片描述


从视图控制器的生命周期来看

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值