将对象(例如数组类型和 NSObject 类型)写入 plist 和 NSFileManager 之间有什么区别吗?
如果可以,我可以将 1000 张图像数据和 mp3 歌曲写入 plist。
将对象(例如数组类型和 NSObject 类型)写入 plist 和 NSFileManager 之间有什么区别吗?
如果可以,我可以将 1000 张图像数据和 mp3 歌曲写入 plist。
由于 plist 文件是一个 XML(主要是文本)文件,因此您必须在写入之前存档数据并在读取之后取消存档(参见NSKeyedArchiver
此处)。
NSFileManager
但是,它是通用文件系统操作的包装器,无需将数据编组为文本即可存储。因此,存储的数据将更小,读/写更快,是显而易见的选择。
NSFileManager用于执行复制文件、删除文件和移动文件等操作。您不会使用 NSFileManager 写出新文件。它仅适用于处理现有文件。在使用 plist 与 NSFileManager 的意义上,它无法与 plist 相提并论。
但是,如果您要回答的问题是我应该将所有数据存储在 plist 中还是单独的文件中,那么这取决于。如果您要存储 1000 张图像和 mp3,那么您绝对不想将它们全部存储在一个 plist 中。在速度和内存方面,Plists 是一种用于存储和更新大量信息的低效格式。例如,如果要更新 plist 中的单个字符串,则必须将整个 plist 读入内存,更新它,然后将整个 plist 写回磁盘。您不能使用Foundation 提供的标准 plist 函数只更新 plist 的一部分。如果您的 plist 包含您所有的图像和 mp3 数据,它会非常慢。
您可能可以不使用 plist 作为图像和 mp3 的清单,这些图像和 mp3 作为单独的文件存储在磁盘上,但即使这样也会变慢。我建议使用 SQLite 或 Core Data 代替文件清单,然后将每个图像和 mp3 作为单独的文件保存在文件系统中。或者,如果您不需要为每个项目存储任何元数据,则根本不需要清单。如果您最终为清单使用了 plist,请确保使用 NSPropertyListBinaryFormat_v1_0 选项将 plist 保存为二进制 plist。这将使 plist 在磁盘上占用更少的空间,并且在您再次读取它时更快地反序列化。