1

为什么要使用 plists 和 xml 文件?如果我只想存储几个值,可以使用纯文本文件还是违反 Objective-C 最佳实践?

- - - -编辑 - - - -

我不确定这是否应该放在单独的帖子中,所以我将它放在这里......

如果我正在制作一个应用程序,用户可以在其中设计纸杯蛋糕并将其保存为他们的偏好(颜色、味道、大小),我应该使用哪种方法。我想我的用户不会做出数百种设计,但有些人不可避免地会做出大量设计。

4

3 回答 3

3

我会说这很好,但是考虑到它们使读取 plist 文件变得多么容易,我的问题是为什么要打扰?

于 2012-06-01T21:07:05.920 回答
2

常用 plist 的主要原因是原生 API 可以轻松处理这些。您可以使用一个命令直接从 plist 加载 NSArray/NSDictionary。

当您将有许多相似数据出现时,将使用 SQL 数据库。例如,如果您需要记录社交应用程序的联系人,您将使用包含 id、姓名、年龄、性别、电话号码、电子邮件等的数据库。

除此之外,还有自定义二进制格式,但这些格式专门用于正在处理的任何项目。根据您需要完成的工作,文本文件可能适合您,但可能会有更好的答案。使用文本文件没有任何问题,但这些并不常用,因为您必须编写自己的方法来解析它们。真的,在我告诉你哪个选项最好之前,我需要更多地了解你将存储什么类型的数据。

回答您的编辑的编辑:

为此,最好的办法是使用 SQL 数据库,因为每个纸杯蛋糕都将具有各种属性,例如名称、使用的蛋糕混合物类型、糖霜类型、糖霜颜色、洒是/否等. 这对于 SQL 数据库来说是完美的,因为 dbs 具有命名列(即“name”、“mixType”等),并且表中的每一行对于这些列中的每一个都有不同的值。

这也可以用 plist 来实现,但效率不高,而且会使用更多磁盘空间(尽管如果您只是将它用于纸杯蛋糕,则不会太多)。我假设你有一个 Cupcake 类,所以你可以像这样实现一个加载函数:

+(id)cupcakeWithContentsOfFile:(NSString*)file {
    if((self = [super init])) {
        NSDictionary* plist = [NSDictionary dictionaryWithContentsOfFile:file];
        self.flavor = [plist objectForKey:@"flavor"];
        // Etc.
    }
    return self;
}
于 2012-06-01T21:11:22.890 回答
2

这是个有趣的问题。我实际上有一个应用程序确实使用简单的文本文件来存储应用程序使用的数据。因为原始代码来自一个windows/mac程序,又想保持数据文件一致,所以windows不提供pfile类型的操作。我在 windows 上编写了所有代码以读取文件,并且由于它都是 ANSI-C,因此可以很好地传输到 MacOS X。

将其移植到 iPhone 和 iPad 上时,移植代码仍然很容易,不仅将数据文件重写为 PList 格式,而且还重写了 PList 读取代码。

对于我从头开始的所有未绑定 Windows 的应用程序,我都使用了 PLists。

这实际上是我反复讨论的一个问题。PList 和/或 XML 读取和处理肯定不会像精心设计的文本文件格式那样具有高性能,因为由于所有多余的标签可能是必要的,也可能不是必需的,因此两者都很臃肿。如果您正在尝试开发具有多种数据类型的单个数据文件,那么这可能是更简单的方法,但如果您正在寻找更少的数据大小,并且可能更快地执行,那么格式化您自己的文件可能会更好。我知道这不是一个确定的答案。

所以最后,它不是“最佳实践”之类的东西,而是一种偏好类型的东西。

于 2012-06-01T21:18:21.790 回答