2017-02-24 135 views
0

我知道plist是做什么的,但plist的一般用途是什么?何时使用plist?

用它来写/读数据是好主意吗?

对不起,我有问题。 谢谢

+1

“我知道plist是做什么的”它是做什么的? – matt

+0

它将数据存储在词典类型的根目录中......当我创建swift项目时,它带有信息。plist,它只是存储版本信息,基本故事板等。 –

+0

plists用于应用程序相关的东西,如你已经提到的info.plist,它告诉操作系统有关你的应用程序的重要事情。它在其他地方用于首选项包设置,我认为NSDefaults使用plists。 plist类似于其他操作系统上无处不在的'.ini'文件,您是否希望使用plists来存储用户数据或元数据取决于数据的复杂程度,许多应用程序都需要更复杂的数据持久性,即NSCoder或核心数据。 – joeybladb

回答

1

假设你的应用程序有一个很大的常量,就像世界上所有国家按字母顺序排列的名字一样。这是一串字符串。你将如何创造这个常数?

一种方法可能是在代码中键入整个数组,一个非常大的数组。

将此文件配置为.plist文件并在应用程序启动时将文件读入阵列可能会更容易。

因此,这是.plist文件的一种用法:它是以规范格式呈现数据的文本呈现,您需要在应用程序的生命周期中使用该数据。

当然,同样的事情是相反的;您可以在应用程序运行时将一组字符串作为.plist文件保存,以便在下次运行应用程序时再次读取它。 (这实际上是UserDefaults的工作方式。)

+0

嗯...我明白了,所以plist更像是静态持有者。在移动应用程序中动态编写(更新)是不是个好主意? –

+0

在我的第二个示例中(“in reverse”)它可能肯定会动态更新。这只是一个方便的格式,用于序列化t o磁盘。 – matt

+0

如果您希望它被动态更新,它可能不是plist的最佳用途。将其视为UserDefaults。如果他们不断变化,最好先使用Dictionary,一旦确定不会再发生更改,请写入文件。否则,你会引入不断读写文件的开销。 – SagarU

0

将plist想象为基于文件的Dictionary(或NSDictionary)的实现。你所拥有的是键值对,你可以将它们解析并用作逻辑的一部分。 如果您可能已经观察到,每个项目中都会有一个Info.plist文件。它存储您可能要添加的不同配置的值。一个例子是NSAppTransportSecurity

一旦你的文件中的值,你可以使用它作为:

var configDict: NSDictionary? 
if let path = NSBundle.mainBundle().pathForResource("Config", ofType: "plist") { 
    configDict = NSDictionary(contentsOfFile: path) 
} 
if let dict = myDict { 
    // Use configDict here 
} 

请记住,你不只是局限于随附捆绑默认的Info.plist该项目。你也可以创建一个你自己的。考虑一下您在启动时获取多个配置的场景。您可以将它保存为plist并稍后参考。

回答问题的第二部分时,如果以非常短的间隔执行读取和写入文件,看起来像是不必要的开销。最好使用本地字典变量,然后以更长的时间间隔写入,或者在确定已完成更改时写入。 Plist更像是一种持久性存储。因此,当应用程序进入后台或用户杀死应用程序时,您可以选择写入文件。

注意:请记住,plist本质上是文件系统中的普通文件。没有什么可以阻止某人阅读(我知道沙盒)。这就是为什么明智的做法是不要将任何密码存储在plist中(也不在UserDefaults中)。

+0

是的,但是使用plist作为我的移动应用程序的数据库是否合适?我尝试了NSObject和Realm,但是效果不好.Plist确实适用于移动应用程序... –

+0

问题之前已经用Swift标记过了,同时,这些标签被编辑了,我马上删除了评论! –

+0

我的不好,我把代码改成了Swift。 – SagarU

0

当需要存储少量持久数据时,移动器很方便。该API很简单。不建议大plist文件。 Apple suggests less than a few hundred kilobytes.您不会使用plist来存储用户生成的数据,因为随着时间的推移,它们可能会超过此限制,仅将其用于您所控制大小的数据。

+0

感谢您的来源。赞赏 –

+0

如果它对您有帮助,您可以将答案标记为正确 – SagarU