ios - NSCoding VS 核心数据

标签 ios core-data persistence nscoding data-management

我一直在寻找一篇解释 NSCoding (NSKeyedArchiver...) 相对于使用 CoreData (SQLite...) 的优点和缺点的文章。

有很多选择,我可以实现我自己的自定义二进制读取器/写入器,或者使用 plists/xml/json...或者使用 SQLite 或 NSCoding。

我现在有点迷路了。 任何人都可以解释主要功能之间的区别是什么吗?

最佳答案

这取决于您要保存哪种类型的数据,以及您是仅在内部使用还是必须与外部服务交换数据。

NSCoding 通常来说是一个数据序列化器。许多内置对象实现了 NSCoder 协议(protocol),允许您将它们保存为二进制流(文件、sqlite 的 BLOB 等)NSKeyedArchiver 为您提供了基于字符串标签在此类流中进行搜索的优势,有点像字典,但您只能使用字符串作为键。如果您偶尔需要保留一些不同类的对象,这种方法很好。

但是,如果您有 许多 相同 类的对象,您最好选择数据库方法、SQLite 或 CoreData。 CoreData 实际上是 SQLite 的包装器,它可以大大简化数据模型的设计,并在幕后对数据库进行查询,而无需编写 SQL 语句。在 CoreData 中,你定义了你的类,并且类的每个实例都可以被持久化,即你可以取回对象成员的值,而不必将它们始终保存在内存中。这是存储大量结构化数据的一种非常方便的方式。例如,如果您要编写一个 Web 浏览器,您可以存储用户的书签,其中包含名称、URL 以及上次访问的时间。

对于 XML 和 JSON,如果您仅在设备本地使用数据,则没有特别的优势。如果您必须与某些外部服务通信,您可能会考虑缓存/保存 XML/JSON 对象,以备后用。其他方法是在您每次需要时从您的内部数据结构(见上文)重新生成这些数据。

如果您自己设计数据模型,我认为使用 plist 的意义就更小了,但也许有人会纠正我。

编辑:我在此处添加一个简短的链接引用,以获取有关如何使用 NSCoding 的教程。 , Core Data ,作为奖励,SQLite .

2016 年 1 月 12 日更新:如果您正在寻找持久性解决方案,我建议您也查看 Realm .

关于ios - NSCoding VS 核心数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9569466/

相关文章:

第二个 ios 模拟器方向错误

ios - SpriteKit - 更改纹理后 FPS 下降

Java 持久性/JPA : @Column vs @Basic

iphone - 将 JSON 映射到核心数据对象

swift - 使用 XCode 7 和 Swift 向下转换核心数据 NSManagedObject

java - Hibernate ElementCollection/JoinTable IntegrityConstraintViolationException

java - 如何在 Hibernate/JPA 中表示加权多对多关系?

ios - 如何使用 xcode 5.1.. 在具有 ios 7 的设备上获得 ios 6 的外观和感觉?

ios - 应用程序在后台时是否可以使用 AVAssetExportSession `exportAsynchronouslyWithCompletionHandler:` 方法?

iphone - 体系结构错误的 undefined symbol