美文网首页
415,数据持久化的几种方式(面试点:NSUserDefault

415,数据持久化的几种方式(面试点:NSUserDefault

作者: 枫叶1234 | 来源:发表于2021-01-17 09:47 被阅读0次
    • NSUserDefaults
    • plist
    • keychain(钥匙串)
    • 归档
    • 沙盒
    • 数据库


      image.png
    1.NSUserDefaults

    NSUserDefaults用于存储用户的偏好设置用户信息,如用户名,是否自动登录,字体大小等.
    数据自动保存在沙盒的Libarary/Preferences目录下.
    NSUserDefaults将输入的数据储存在.plist格式的文件下,这种存储方式就决定了它的安全性几乎为0,所以不建议存储一些敏感信息如:用户密码,token,加密私钥等!
    它能存储的数据类型为:NSNumber(NSInteger、float、double),NSString,NSDate,NSArray,NSDictionary,BOOL.
    不支持自定义对象的存储.
    使用注意点:

    • NSUserDefaults存储的数据都是不可变的,想将可变数据存入需要先转为不可变才可以存储.
    • NSUserDefaults是定时把缓存中的数据写入磁盘的,而不是即时写入,为了防止在写完NSUserDefaults后程序退出导致的数据丢失,可以在写入数据后使用synchronize强制立即将数据写入磁盘.
    2.plist

    属性列表文件,全名是Property List,这种文件的扩展名为.plist,因此,通常被叫做plist文件。它是一种用来存储串行化后的对象的文件,用于存储程序中经常用到且数据量小而不经常改动的数据。
    可以存储的类型:NSNumber,NSString,NSDate,NSData ,NSArray,NSDictionary,BOOL.
    不支持自定义对象的存储.

    使用注意点:
    如果需要存储自定义类型的数据需要先进行序列化!

    3.Keychain(钥匙串)

    用于本地重要数据的存储,将数据加密后存储在本地更安全.如:密码,秘钥,序列号等.当你删除APP后Keychain存储的数据不会删除,所以在重装App后,Keychain里的数据还能使用。从ios 3.0开始,跨程序分享keychain变得可行而NSUserDefaults存储的数据会随着APP而删掉.
    使用keychain时苹果官方已经为我们封装好了文件KeychainItemWrapper,引入即可使用.当然也可是使用其他优秀的第三方的封装,比如ssKeychain

    4.归档(NSKeyedArchiver)

    归档是iOS开发中数据存储常用的技巧,归档可以直接将对象储存成文件,把文件读取成对象
    相对于plist或者userdefault形式,归档可以存储的数据类型更加多样,并且可以存取自定义对象。对象归档的文件是保密的,在磁盘上无法查看文件中的内容,更加安全。
    遵守NSCoding协议,并实现该协议中的两个方法。如果是继承,则子类一定要重写那两个方法。因为子类在存取的时候,会去子类中去找调用的方法,没找到那么它就去父类中找,所以最后保存和读取的时候新增加的属性会被忽略。需要先调用父类的方法,先初始化父类的,再初始化子类的。
    保存数据的文件的后缀名可以随意命名

    存储类型 安全性 文件名后缀 数据量大小 应用场景)
    NSUserDefaults 不安全 plist 用户偏好设置,用户名
    plist 不安全 plist 不经常改动
    keychain 安全 密码、秘钥、序列号
    归档 安全 任意 缓存
    5.沙盒

    持久化在Document目录下,一般存储非机密数据。当App中涉及到电子书阅读、听音乐、看视频、刷图片列表等时,推荐使用沙盒存储。因为这可以极大的节约用户流量,而且也增强了app的体验效果.
    Application:存放程序源文件,上架前经过数字签名,上架后不可修改
    Documents: 保存应运行时生成的需要持久化的数据,iTunes同步设备时会备份该目录。例如,游戏应用可将游戏存档保存在该目录。
    tmp: 保存应运行时所需的临时数据,使⽤完毕后再将相应的文件从该目录删除。应用没有运行时,系统也可能会清除该目录下的文件。iTunes同步设备时不会备份该目录。
    Library/Caches: 保存应用运行时生成的需要持久化的数据,iTunes同步设备时不会备份该目录。一般存储体积大、不需要备份的非重要数据,比如网络数据缓存存储到Caches下。
    Library/Preference: 保存应用的所有偏好设置,如iOS的Settings(设置) 应会在该目录中查找应⽤的设置信息。iTunes同步设备时会备份该目录

    6.数据库

    存储数据量较大的数据,一般使用数据库来存储。如:FMDB、CoreData、Realm、WCDB

    相关文章

      网友评论

          本文标题:415,数据持久化的几种方式(面试点:NSUserDefault

          本文链接:https://www.haomeiwen.com/subject/akxeaktx.html