NSCoding VS核心数据

Lol*_*Run 23 persistence core-data nscoding data-management ios

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

有很多的选择,我可以实现自己的自定义二进制读/写器,或使用的Plist/XML/JSON ...或使用SQLite或NSCoding.

我现在有点迷失了.任何机构都可以解释MAIN功能之间的区别吗?

MrT*_*rTJ 33

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

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

但是,如果您有许多同一类的对象,那么最好选择数据库方法,SQLite或CoreData.CoreData实际上是SQLite的一个包装器,可以简化设计数据模型的大量工作,并且可以在窗帘后面对DB进行查询,而无需编写SQL语句.在CoreData中,您可以定义类,并且可以保持类的每个实例,即您可以返回对象成员的值,而不必始终在内存中.这是存储大量结构化数据的一种非常方便的方法.例如,如果您编写Web浏览器,则可以使用名称,URL和上次访问时间来存储用户的书签.

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

如果您自己设计数据模型,我会发现使用plist的意义更小,但也许有人会纠正我.

编辑:我在这里添加一个简短的链接参考,教程如何使用NSCoding,核心数据,以及作为奖励,SQLite.

更新12.01.2016:如果您正在寻找持久性解决方案,我建议您查看Realm.

  • 内存和性能优化之间始终存在平衡.使用NSCoding或您的自定义二进制表示,您可以更好地控制写入存储的位或存储在存储器中,但为此您必须支付更多编码的代价,因此代码的效率将取决于您的能力.使用CoreData/SQLite,可以高效地为您实现许多有用的东西(搜索,查询,索引,连接等).注意:CoreData对象仅在需要时才加载到内存中,否则它们将保留在db中. (2认同)

pip*_*ter 9

Mattt Thompson提供了NSCodingCore Data和NSKeyedArchiverNSHipster 之间各种差异的可消解细分:http://nshipster.com/nscoding/