【问题标题】:pList or hard coded objects?pList 或硬编码对象?
【发布时间】:2011-09-19 14:25:50
【问题描述】:

在我的应用程序中,我需要 Person 类的对象的简短列表。每个 Person 都有一些属性,例如 namefirstNameage 等。 到目前为止,所有对象都在 Objective-C 中硬编码并添加到 NSMutableArray。 这种方法非常适合我的需求,因为我不需要在运行时添加任何其他对象。

不知何故,我有了使用 plist 而不是硬编码对象的想法可能是一个更好的主意,因此我从我的数组中创建了一个 plist。 令我惊讶的是,plist 文件并不小,现在我想知道使用硬编码对象是否是更好的方法。

我不需要任何核心数据(我猜),因为我需要的只是一个永远不会更改且不应由用户修改的对象列表。

【问题讨论】:

  • 我不确定,但我认为您刚刚回答了您的问题,如果不打算修改此数据,则将其保留为硬编码。

标签: objective-c plist


【解决方案1】:

使用 plist 文件的好处如下:

  • 您的项目中可以有多个 plist,并且可以通过代码轻松切换到您要加载的 plist。例如,在使用多个数据池测试您的应用程序时很有用,或者例如为每个本地化设置一个 plist(一个用于英语,一个用于西班牙语,一个用于中文等...)
  • 您可以加载/卸载数据,因此它们不会卡在内存中
  • 您可以保存 plist 文件、出于任何原因对其进行修改和恢复,而不会丢失您修改过的“真实”应用代码。

但是...如果您的硬编码非常干净,将静态数据存储到自定义类中,及其访问器等...所有这些都将适用于您的自定义类(它可以保存为个人文件,加载到内存然后释放,本地化,...),所以 plist 文件不会有任何明显的好处。

【讨论】:

  • 如果我的类中有用于所有可能选项(颜色)的对象数组,但在运行时只有一个对象处于活动状态。所以,整个类都在内存中,但它并没有全部使用,只使用其中一个。也许最好把它留在 plist 中?
【解决方案2】:

我自己也有类似的情况,最后选择了 plist。它从我的应用程序启动中消除了许多重复的代码行(这对我来说是最大的好处),并且使以后添加或更改项目变得更加容易。如果逐字节地在 plist 与代码中执行它需要更多的“字符”,我会感到惊讶(显然代码在编译时更小,但我们在说什么,几千字节?)。

【讨论】:

    【解决方案3】:

    属性列表也是一个对象图,除了这些对象是通用容器而不是您的项目域的模型。所以它们不是更小或更容易使用。磁盘中 plist 的大小并不重要,因为您只需对其进行一次反序列化,这将占应用程序生命周期的近 0%,而且它也可以忽略不计,因为您无需处理大量数据。

    如果您尝试使用 plist 来获得更大的灵活性(可能用于单元测试),您可以实现 NSCoding,并将存档/取消存档到二进制 plist。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-01
      • 2020-08-03
      • 2014-06-30
      • 2020-03-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多