增量写入 plist 文件

Posted

技术标签:

【中文标题】增量写入 plist 文件【英文标题】:write plist files incrementally 【发布时间】:2011-06-22 05:53:50 【问题描述】:

我有一个NSMutableArray,我使用writeToFile: atomically: 将它写入plist 文件。数组中的元素都是属性列表对象。

然后在我的 iPhone 应用程序中,我遇到了一个案例:当NSMutableArray 需要添加一个对象并且我还想更新 plist 文件时。现在我要做的是在添加新的时调用writeToFile: atomically:

但是当代码>NSMutableArray的数据量很大的时候,肯定性能很差。所以我想知道如何将新添加的元素写入现有的 plist 文件。

谢谢。

PS:业务逻辑是:

当用户做一些动作时,比如发送一条新消息或添加一张新照片,我会记录用户、消息/图像数据和时间(都是属性列表对象)。动作可以在任何地方发生,我没有创建数组来始终检查动作(也不需要)。当然我是用sqilte来做的,但是我还需要一个plist文件,这样用户的朋友可以随时下载。朋友不需要用户的请求,只需下载它。所以我打算保持一个最新的 plist 文件。 这就是我需要它的全部原因。

【问题讨论】:

您是否使用过性能不佳的仪器进行测量? Plist 速度非常快,所以除非你知道它很慢,否则不要担心。 @mortenfast,我没有用仪器测量,但我感觉到了。在数组中,每个元素都是一个自定义对象,它有 8 个属性(NSString,NSDate,NSData),其中一个是从 UIImage 创建的 NSData。所以,你可以想象... 【参考方案1】:

如果出现plist 文件性能不佳的阶段,并且您必须担心增量添加数据,那么您实际上必须查看Core Data

【讨论】:

我需要plist文件以便其他人下载。 如果plist 很大,是否需要将整个内容发送过来也很重要。你不应该为diff 服务吗?确定其他用户在当前状态下需要哪些内容并仅传递该信息。只是一个想法。我不知道你的用例,所以不能发表太多评论。 对此+1。如果数据集非常大(并且包含大量二进制内容),则 plist 不是要走的路。 如何在 plist 文件中使用 diff? 不,我不是在谈论 plist 文件上的差异。我说的是根据其他用户的需求生成核心数据的差异。但是,因为它是一个数组。您可以识别其他用户没有的数组块并基于该块生成一个 plist 并将该 plist 发送过去。

以上是关于增量写入 plist 文件的主要内容,如果未能解决你的问题,请参考以下文章

plist中的增量编号

将增量文件写入 S3 (MinIO) - PySpark 2.4.3

Databricks - 从增量表写入流到 orc 文件的读取流仅具有更改

在动态更新时在java中增量访问文件?

使用 h5py 对 hdf5 进行增量写入

自动增量未写入对象