gpt4 book ai didi

objective-c - 将 plist 转换为二进制 plist

转载 作者:太空狗 更新时间:2023-10-30 03:13:24 30 4
gpt4 key购买 nike

Apple 强烈建议在将基于 XML 的大型数据集读入 iPhone 应用程序时使用二进制 plist 格式。他们的理由之一是 XML 解析在 iPhone 上非常费力。但是,这需要首先转换驻留在远程 Web 服务器上的文件。

对于频繁更改的内容,手动执行此操作是 Not Acceptable 。如果可能的话,我想避免让基于 Web 的应用程序调用命令行来执行转换(即 plutil)。

是否有公开可用的算法来执行此转换?

最佳答案

是的。所有 plist 代码都是 CoreFoundation 的一部分,它是开源的。 CoreFoundation 可以直接在 Linux 和 Windows 上构建和运行,因此您可以使用在 Mac OS X 上使用的普通 API 编写 CF 工具,但在其他平台上构建和运行它。

您要查看的特定 API 是 CFPropertyListWriteToStream() . CoreFoundation 的代码可从 Apple 获得。 ( tarball ),以及其他地方。

最后,根据您更新文件的频率、您在服务器上需要备用多少处理器以及您的数据有多少重复,您可能还可以做一项重要的改进。默认情况下,二进制 plist 中的某些元素是唯一的(例如字符串)。其他元素不是(例如数组和 dictionarts)。二进制 plist 格式允许它们是唯一的,问题是实际遍历和唯一的数组和字典是昂贵的。如果您的内容中有很多相同的数组或字典,您可能会通过对它们进行唯一化来显着减少大小。您可以通过在 CFBinaryPlist.c 中破解 _flattenPlist() 来启用它.

如果您这样做,请确保对其进行非常彻底的测试,并且不要对您无法通过网络更新的任何文件进行测试,以防万一将来的版本进行任何优化会破坏它。此外,请确保您已准备好在接到通知后立即将其关闭。

关于objective-c - 将 plist 转换为二进制 plist,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/264440/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com