iOS - 是不是有任何框架以 plist 或 xml 形式提供大量任意二进制数据?

Posted

技术标签:

【中文标题】iOS - 是不是有任何框架以 plist 或 xml 形式提供大量任意二进制数据?【英文标题】:iOS - is there any framework serving huge amount of arbitrary binary data as plist or xml?iOS - 是否有任何框架以 plist 或 xml 形式提供大量任意二进制数据? 【发布时间】:2012-02-09 16:25:45 【问题描述】:

我知道出于某些性能原因,对大量任意二进制数据使用 plist 或 xml 并不是一个好主意。

假设我的数据格式是一个数组(一些字符串,一个整数,二进制数据),其中二进制数据的大小超过几兆字节(不固定),并且数组大小是数百个。我想将整个数据序列化并将其存储在我的 Documents 目录上的一个文件中,并仅将其中一些从该文件读取到内存中。所以,我最初认为使用 plist 是一种实现需求的方法,但如上所述,这不是一个好方法。

避免该问题的一种方法是使用二进制数据的路径而不是二进制数据,然后我可以使用 Core Data 或类似的东西。但是,那不满足要求。

找了几天合适的框架,好像没有。 我应该建立自己的编码和解码方法吗? NSArchiving 是否足以满足我的要求?

【问题讨论】:

【参考方案1】:

NSCoding 实际上只是创建了一个二进制 Plist,因此性能将是相似的(嵌入在您的应用中的 XML Plist 在您构建时会转换为二进制)。

(仅供参考,如果您获取一个 NSCoded 文件并将 .plist 放在末尾,您可以在 Plist 编辑器中打开它并查看所有属性,尽管内容不像常规 plist 那样真正人类可读),

虽然 Plist 非常快 - 对于大小为几 MB 的文件来说可能已经足够快了。您是否真的尝试过为此使用 Plist?

另一种选择是使用 JSON 文件并使用 JSONKit 加载它。 JSONKit 已将其性能作为基准,因为它们的加载速度甚至比二进制 plist 还要快:http://www.cocoanetics.com/2011/03/json-versus-plist-the-ultimate-showdown/

如果这还不够快,下一个最佳选择是将其存储在 SQLLite 数据库中,尽管这需要更多的工作。数据库通常更适合仅加载文件的一部分,因为您不必将整个文件加载到内存中,您只需获取所需的部分即可。

【讨论】:

【参考方案2】:

您不想使用 XML 或文本 Plist。我想我会先尝试NSCoding 和朋友,请参阅Archives and Serialization Guide。但是,如果您真的需要将整个内容存储到一个文件中,然后只读取其中的一部分,我认为您只能靠自己了。数据库怎么样?

【讨论】:

感谢您的建议。我认为使用数据库不是一个好主意,因为我应该使用每个二进制数据的路径,它不能满足我的要求。

以上是关于iOS - 是不是有任何框架以 plist 或 xml 形式提供大量任意二进制数据?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 xcode 5 iOS 7 中以编程方式编辑 plist?

iOS 11.x系统颜色

如何为 iOS 6 设置 plist 的演练或教程?

iOS 中的身份验证和会话管理

如何以 plist 或 zip 格式读写二进制数据?

iOS 框架 - 将 plist 放入字典