【问题标题】:Difference between writing a file to plist and NSFilemanager将文件写入 plist 和 NSFilemanager 之间的区别
【发布时间】:2012-05-05 19:27:30
【问题描述】:

将对象(例如数组类型和 NSObject 类型)写入 plist 和 NSFileManager 之间有什么区别。

如果可以,我可以将 1000 张图像数据和 mp3 歌曲写入 plist。

【问题讨论】:

  • 将文件写入 plist?那是什么意思? plist 是一种文件格式而不是文件系统。
  • @trojanfoe 编辑了我的问题

标签: objective-c plist nsfilemanager


【解决方案1】:

NSFileManager 用于执行复制文件、删除文件和移动文件等操作。您不会使用 NSFileManager 写出新文件。它仅适用于处理现有文件。在使用 plist 与 NSFileManager 的意义上,它无法与 plist 相提并论。

但是,如果您要回答的问题是我应该将所有数据存储在 plist 中还是单独的文件中,那么这取决于。如果您要存储 1000 张图像和 mp3,那么您绝对不想将它们全部存储在一个 plist 中。在速度和内存方面,Plists 是一种用于存储和更新大量信息的低效格式。例如,如果要更新 plist 中的单个字符串,则必须将整个 plist 读入内存,更新它,然后将整个 plist 写回磁盘。您不能使用standard plist functions provided by Foundation 仅更新 plist 的一部分。如果您的 plist 包含您所有的图像和 mp3 数据,那么它会非常慢。

您也许可以不使用 plist 作为图像和 mp3 的清单,这些图像和 mp3 作为单独的文件存储在磁盘上,但即使这样也会变得很慢。我建议使用 SQLite 或 Core Data 代替文件清单,然后将每个图像和 mp3 作为单独的文件保存在文件系统中。或者,如果您不需要为每个项目存储任何元数据,则根本不需要清单。如果您最终为清单使用了 plist,请确保使用 NSPropertyListBinaryFormat_v1_0 选项将 plist 保存为二进制 plist。这将使 plist 在磁盘上占用更少的空间,并在您再次读取时更快地反序列化。

【讨论】:

    【解决方案2】:

    由于 plist 文件是一个 XML(主要是文本)文件,因此您必须在写入之前存档您的数据,并在读取之后取消存档(参见 NSKeyedArchiverhere)。

    NSFileManager,然而,它是通用文件系统操作的包装器,不需要将数据编组为文本来存储它。因此,存储的数据会更小,读/写更快,是显而易见的选择。

    【讨论】:

    • 技术上现代 plist 使用二进制格式,但概念仍然有效。
    • @StilesCrisis 同意 - 但是存储数千张图像并不是显而易见的选择。
    • 绝对正确,我个人不会使用 plist 来聚合文件数据。
    猜你喜欢
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    • 2011-02-05
    • 1970-01-01
    • 1970-01-01
    • 2013-11-07
    • 2012-02-17
    • 2012-05-15
    相关资源
    最近更新 更多