在iOS中存储任意键/值

 jelly62_736 发布于 2023-02-12 16:34

有没有办法在iOS中存储任意键/值,我知道我可以创建在SQLite中存储JSON键值的列,但我想要更高效的东西,所以我只能从查询记录中获取所需的值.

如果我可以在没有外部数据库(如LevelDB)的情况下执行此操作,但如果您认为这可能是唯一的方法,请告诉我您更喜欢哪一个.

更新:

数据将包含从服务器检索的文章(长html文章,标题和日期以及其他未定义的数据)和其他元数据,每次用户打开应用程序时都会检索并显示它.(这就是为什么NSUserDefaults不适用于这个用例)

1 个回答
  • 我写了一个处理50MB文本的应用程序(大约10,000篇HTML文章).他们被索引编入索引articleID.我在这个应用程序中使用过LevelDB,原始Sqlite,带有FMDB的Sqlite,CoreData和NSUserDefaults.

    这是我学到的东西:

    LevelDB为您提供任意键/值访问模式,如果您按顺序读取它们,则读取速度非常快.但是如果你需要随机读取一个键(不使用它的迭代器),它比Sqlite慢得多.

    如果您正确使用原始Sqlite,则可以快速进行随机读取.(使用索引,覆盖索引等)但是您将失去读写任意键/值的能力.

    FMDB为您提供了一个很好的Objective-C API,但是在Objective C和C之间转换数据时浪费了50%的CPU时间(NSString < - > char*)(它仍然比Core Data快4倍+)

    我个人认为核心数据很糟糕.所以我不建议任何人使用它.对不起,我不想回忆起使用CoreData时的那些痛苦.

    NSUserDefaults最适合用户设置,仅适用于用户设置,绝对不是长篇文章的解决方案.

    我使用原始Sqlite和Google Protocol Buffer.

    协议缓冲区的编码和解码速度非常快.它还使您能够通过修改.proto文件来添加新字段,无需更改DB方案.您可以存储多个相关的密钥在一个单一的原型,比方说articleMetaData.proto含有title,author并且publishDate,如果一段时间后,你需要添加modifyDate你只需将其添加到原文件,并存储二进制SQLite中在同一列.

    2023-02-12 16:38 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有