Objective c 在iOS中,纯文本文件作为只有几个值的配置文件的缺点是什么?

Objective c 在iOS中,纯文本文件作为只有几个值的配置文件的缺点是什么?,objective-c,xml,database,plist,Objective C,Xml,Database,Plist,为什么要使用plists和xml文件?如果我只想存储一些值,那么使用纯文本文件可以吗?还是这违反了Objective-C最佳实践 -------编辑------- 我不确定这是否应该在一个单独的职位或不,所以我会把它放在这里 如果我正在制作一个应用程序,用户可以设计一个纸杯蛋糕并根据自己的喜好(颜色、味道、大小)保存它,我应该使用哪种方法。我想我的用户不会设计成百上千的设计,但一些人不可避免地会设计出大量的设计。我会说这很好,但考虑到他们阅读plist文件有多容易,我的问题是为什么要麻烦?我会说

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

-------编辑-------

我不确定这是否应该在一个单独的职位或不,所以我会把它放在这里


如果我正在制作一个应用程序,用户可以设计一个纸杯蛋糕并根据自己的喜好(颜色、味道、大小)保存它,我应该使用哪种方法。我想我的用户不会设计成百上千的设计,但一些人不可避免地会设计出大量的设计。

我会说这很好,但考虑到他们阅读plist文件有多容易,我的问题是为什么要麻烦?

我会说这很好,但考虑到他们阅读plist文件有多容易,我的问题是为什么要麻烦?

plists被普遍使用的主要原因是因为本机API可以轻松处理这些问题。您可以使用一个命令直接从plist加载NSArray/NSDictionary

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

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

回答您的编辑的编辑:

为此,最好使用SQL数据库,因为每个纸杯蛋糕都有不同的属性,例如名称、使用的蛋糕混合类型、结霜类型、结霜颜色、洒水是/否等。这非常适合SQL数据库,因为dbs已经命名了colums(即“名称”、“混合类型”等),表中的每一行对每一列都有不同的值

这也可以用plist来实现,但效率不高,而且会占用更多的磁盘空间(不过如果只是用它做纸杯蛋糕的话,就不会占用太多)。我假设您有一个Cupcake类,所以您可以实现如下加载函数:

+(id)cupcakeWithContentsOfFile:(NSString*)file {
    if((self = [super init])) {
        NSDictionary* plist = [NSDictionary dictionaryWithContentsOfFile:file];
        self.flavor = [plist objectForKey:@"flavor"];
        // Etc.
    }
    return self;
}

通常使用plist的主要原因是本机api可以轻松地处理这些问题。您可以使用一个命令直接从plist加载NSArray/NSDictionary

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

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

回答您的编辑的编辑:

为此,最好使用SQL数据库,因为每个纸杯蛋糕都有不同的属性,例如名称、使用的蛋糕混合类型、结霜类型、结霜颜色、洒水是/否等。这非常适合SQL数据库,因为dbs已经命名了colums(即“名称”、“混合类型”等),表中的每一行对每一列都有不同的值

这也可以用plist来实现,但效率不高,而且会占用更多的磁盘空间(不过如果只是用它做纸杯蛋糕的话,就不会占用太多)。我假设您有一个Cupcake类,所以您可以实现如下加载函数:

+(id)cupcakeWithContentsOfFile:(NSString*)file {
    if((self = [super init])) {
        NSDictionary* plist = [NSDictionary dictionaryWithContentsOfFile:file];
        self.flavor = [plist objectForKey:@"flavor"];
        // Etc.
    }
    return self;
}

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

当把它移植到iPhone和iPad上时,移植代码和将数据文件重新写入PList格式以及PList读取代码同样容易

对于所有我从零开始使用的、不受windows限制的应用程序,我都使用了PLists

这实际上是一个我反复讨论的问题。PList和/或XML读取和处理的性能肯定不会像设计良好的文本文件格式那样高,因为由于可能需要或可能不需要所有多余的标记,两者都会膨胀。如果您试图开发一个包含多种数据类型的单一数据文件,那么这可能是一种更简单的方法,但是如果您希望数据量更小,执行速度更快,那么格式化您自己的文件可能会更好。我知道这不是一个确定的答案


因此,最终,这不是一种“最佳实践”类型的东西,而是一种偏好类型的东西。

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

当谈到将其移植到iPhone和iPad时,它