扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
iOS 开发中一般有如下几种数据存储方式,需要根据具体的业务场景,选择合适的数据存储方式。
创新互联建站是一家集网站建设,夏津企业网站建设,夏津品牌网站建设,网站定制,夏津网站建设报价,网络营销,网络优化,夏津网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。
用户默认设置 – 这种情况通常不需要用户干预,如游戏通关信息,Video播放记录,退出之后下次进入时恢复到退出时的情况。
设置束提供了一个通过 iPhone、iPad的设置应用程序进行配置的接口。
直接访问文件系统读写属于当前App的iOS文件系统部分的文件。
SQLite 数据库是嵌入式的和轻量级的SQL数据库,SQLite 是由C实现的。
远端数据库这个一般由App调用远端的RESTFulWCF服务,将JSON、XML 数据传递给远端的 Web 服务,读写数据库的逻辑完全在 Web 服 务端实现。
一般获取本地数据是从plist文件中读取JSON数据。
读取数据:
NSString
*plistPath
=
[[NSBundle
mainBundle]
pathForResource:@"city"
ofType:@"plist"];
NSArrary
*cityArray
=
[[NSArray
alloc]initWithContentsOfFile:plistPath];
这里的cityArray根据你存在plist中的数据类型来确定,如果plist中是字典类型,那么你这里需要使用NSDictionary去存储你从plist中获取到的数据。
至于本地存储数据的话根据你项目的具体功能来设计,一般的小型数据如用户昵称、手机号等使用NSUserDefault即可,但是如果是大量数据如账单类app中的账单数据那么此时需要考虑使用sqlite3去存储数据,至于密码之类就需要使用NSKeydArchiver去存储。
一、 首先简述一下 Userdefault (介绍使用了该作者的文章)
1.适合存储轻量级的本地数据。
比如用户id 用户的登录token什么的 这种比较短小的数据
2.NSUserDefaults支持的数据格式有:NSNumber、NSData、NSDate、NSString、NSArray、NSDictionary、BOOL。
3.以键值对的形式进行存储。
4.存储时间为整体应用程序的存储时间,如果想需要删除,需要删除整体应用程序。
⚠️ 存储声明的时候因为是动态的,先声明再调用,声明存储的时候不会出现异常提示,但执行的时候会出现 --断言--(因为存储对象在这里编译是nil)
iOS本地化存储的数据保存在沙盒中。
(1) Documents :iTunes会备份该目录。一般用来存储需要持久化的数据。
(2) Library/Caches :缓存,iTunes不会备份该目录。内存不足时会被清除,应用没有运行时,可能会被清除。一般存储体积大、不需要备份的非重要数据。
(3) Library/Preference :iTunes同会备份该目录,可以用来存储一些偏好设置。
(4) tmp : iTunes不会备份这个目录,用来保存临时数据,应用退出时会清除该目录下的数据。
获取沙盒文件:
其中:
可以把字典或数组直接写入到文件中。另外, NSString 、 NSData 、 NSNumber 等类型,也可以使用 writeToFile:atomically: 方法直接将对象写入文件中,只是 Type 为空。
NSUserDefaults是轻量级存储,一般使用它来进行一些设置的记录,比如用户ID,开关是否打开等设置,通过键值对的方式记录设置,所以这个有时候也被称为偏好设置。
NSUserDefaults可以存储的数据类型包括: NSData 、 NSString 、 NSNumber 、 NSDate 、 NSArray 、 NSDictionary 。如果要存储其他类型,则需要转换为前面的类型,才能用NSUserDefaults存储。
也可以写成宏定义
之前项目中在展示用户数据的时候都是先直接从网络获取,然后再展示,之所以这样做而不将用户数据存储到本地再展示的原因是当时考虑到如果用户在其他设备上对该用户的数据进行了修改那么原来设备上用户信息的展示就会出错,还是从网络获取的数据可靠。(存储到本地同样能正确展示用户数据,只怪自己当初没深入思考过这个问题)
先从网络获取用户数据再展示用户数据会有一个问题,由于网路请求数据是需要一定时间的,这样当我打开一个包含用户数据的页面的时候会有片刻时间无法看到用户的数据,尤其在这个页面包含用户头像的时候这个效果(闪屏)更加明显,给用户的体验不是很好。
我们可以在项目中创建一个存储用户信息的类,这个类可以将用户信息存储到本地,在展示用户数据的时候 先从本地去取数据 这样就不会有之前片刻时间看不到用户数据的闪屏效果, 再从网络上获取数据同时将数据存储到本地,再重复从本地取的操作(这样能保证数据是最新的,不会出错) 。
存储用户数据到本地有三个要点需要注意:
这个存储用户数据的类相当于一个中介,在从网络获取到数据时并没有直接去展示用户数据而是先将数据放到了中介中,在展示用户数据的时候再去这个存储了用户数据的中介中去取数据。
本篇文章到这里就结束了,愿大家加班不多工资多,男同胞都有女朋友,女同胞都有男朋友。????
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流