iCloud详解——文档存储(1)

大家好,我是指北君,在iCloud系列中已经为大家介绍基本知识和键值存储,今天指北君为大家介绍iCloud的文档存储。

前言

使用iCloud的文档存储可以让应用支持文档的同步能力:用户可以通过iCloud账户在所有的设备使用应用文档。

通过文档协调器(NSFileCoordinator),应用的文档自动实现多端设备的同步能力。处理iCloud文档时,必须使用文件协调器和演示者。

原理

应用通过iCloud文档存储保存文件或目录时,系统会自动将这些内容传输到用户的iCloud的其他设备。 使用iCloud文档存储和使用本地文件系统类似,但有以下几个约束:

  • 权限请求,需要请求访问iCloud容器目录的权限。
  • 同步API,应用程序使用iCloud存储的API来访问容器目录和管理文件。
  • 文件协调,使用文件协调器来读取和写入文件的内容。

下图显示了设备上本地存储的简化表示,除了应用程序的本地数据目录外,应用程序还可以访问任何具有适当权限的iCloud容器。iCloud容器本身也存在于设备上,但位于文件系统的不同部分,必须在使用前进行配置。

iCloud容器

文件协调

应用需要使用文件协调来访问容器中的文件和目录,文件协调使用文件协调器和文件展示器访问文件和目录,以此统一数据序列化和反序列化入口来保持数据完整性。文件展示者监控一个文件,当另一个线程或进程修改时获取到通知。对文件的所有操作都必须通过文件协调器,协调器与所有文件展示者协调操作。例如,当将文件做Move操作时,文件协调器将新位置通知所有文件展示器;当文件执行写操作时,文件协调器会延迟写入操作,并通知所有展示器,直到所有文件展示者都返回可以安全写入。

数据传输

文档(应用的)首次加入到iCloud容器时,系统会将整个文件或文件包上传到iCloud云端。

新增上传

上传步骤为:

  1. 上传文档的元数据,其中包括文档名称、修改日期、文件大小和文件类型等信息。
  2. 上传文档的数据。 先上传文档元数据,是因为元数据较小可以快速上传,并快速同步到其他设备,其他设备也能知道有新增文档或者文档发生变更。

当对已有文档进行修改时,iCloud支持传输优化,优化使得iCloud可以不用在每次更改时发送整个文件或文件包,而是仅发送元数据和更改的部分,这也称为增量同步能力。

增量同步步骤:

  1. 首先发送文件元数据,以便快速上传和同步到其他设备。
  2. 发送元数据后,系统仅上传文档中发生更改的部分,这种优化减少了 iCloud 网络流量并减少了设备消耗的电量。 开发者需要按照支持增量同步的规范进行设计,来实现增量同步。

修改上传

当iCloud服务器中出现新的文档时,设备会请求将新增的文档下载到本地。

  1. 设备请求文档的元数据,以便设备知道该文件的存在。
  2. 下载文档数据,这个环节在不同类型的终端上有些微差异。

新增下载

当iCloud上的文档变化时,需要将变化的部分下载到各个设备。

  1. 下载文件的更新文档元数据。
  2. 收到元数据后,设备会在适当的时间自动拉取更改,下载的数据如果经过优化设计可以支持增量下载。

新增下载

总结

关于iCloud的文档存储暂时分享到这里,指北君在文档中介绍了iCloud文档的基本知识,以及数据传输的原理,关于iCloud的文档存储指北君还会在后面继续继续进行介绍。

我是指北君,操千曲而后晓声,观千剑而后识器。感谢各位人才的:点赞、收藏和评论,我们下期更精彩!

Java Geek Tech wechat
欢迎订阅 Java 技术指北,这里分享关于 Java 的一切。