我负责存储部分,要先思考两个存储问题:数据本地存储方案,和数据云端存储方案。
由于这是个UGC App,内容需要在本地存储以提供流畅的操作体验,还要同步到云端以保证数据不丢失,还要能在用户的多个设备之间同步。
1,云端存储方案。
因为是EverNote的铁杆用户,所以计划保存到EverNote,今天突然想为什么不试试iCloud呢?
从苹果开发者网站下载两个介绍iCloud编程的视频,对它有了大概了解:
- 1,主要解决多个设备之间同步数据的问题,而不是为解决数据永久性存储问题(当然也支持永久性存储)。
- 2,从iOS5.1开始支持。
- 3,每个用户有免费的5G空间。
- 4,支持Key/Value和文件方式的存储,对于文件方式的存储,当文件发生改变时,仅同步传输改变的部分,这点很像rsync。
- 5,可以跟App无缝集成,以消息方式通知App数据是否需要有改变,以及哪些数据改变了。
这么多优点,把EverNote甩出两条街,做iOS开发的人,如果不用iCloud做云存储,那就太暴殄天物了,原因如下:
- 1,无需额外注册,使用AppleID即可辨识用户,用iOS设备的人,基本都有AppleID,除非越狱用户,但我的App不是给他们设计的。
- 2,跟iOS系统集成的好,以消息通知方式处理数据同步,开发更简单。
- 3,5G的免费空间,对于小数据量App来说足够了。
- 4,如果用户需要更大的空间,付费买空间即可,这也是Apple愿意看到的结果。所以使用iCloud能达到用户、开发者、Apple三方共赢。
2,本地存储方案。
之前做的几个App都使用本地文件的方式存储数据,因为:
- 1,数据量小,基本都是配置类型数据。
- 2,要存储的数据都是NSArray、NSDictionary、NSData一类的对象,可以通过writeToFile和initWithContentsOfFile跟文件打交道。
- 3,App启动时所有数据就会加载到内存。
- 4,不需要同步到云端。
正在做的App恰好这几点都不具备:数据量日积月累下可能会达到数千条,还有大量小文件需要同步到云端,需要做本地数据搜索。
同事之前推荐过SQLite,于是找了个例程看了看,决定使用SQLite,原因如下:
- 1,接口简单,使用门槛低。
- 2,数据库采用本地文件方式存储,可以不加修改的同步到iCloud。
- 3,SQL搜索方便,不需要学习额外的知识,可以快速开发出产品原型。
明天开始放端午节小长假,今晚看捷克VS葡萄牙的欧洲杯1/4决赛,看完再睡一觉就到十点了,接下来再学习下iCloud API(文档+视频),把用法搞清楚。