1

我正在开发的应用程序有 10 个控制器。我想将设置屏幕中的一些状态信息分享给 5 个控制器。以下选项中的最佳策略是什么:

  1. 使用 NSUserdefaults 存储状态信息并使用它。
  2. 将状态信息存储在 AppDelegate 实例中并在相关控制器中使用
  3. 使用单例实例来维护状态信息并在相关控制器上使用它

哪一个会更好?让我知道是否还有其他选择。

4

1 回答 1

2

NSUserDefaults解决方案还不错,至少如果这些价值观真的会自然而然地结束的话。当然忘记单例的想法,无论是单独的单例类还是应用程序委托。


还有另一种可能性,即减少控制器之间的耦合。与其依赖将设置作为属性公开的特定类,不如将所需的设置作为各个控制器上的属性:

@interface Controller : UIViewController
@property(assign) NSUInteger logLevel; // a sample setting
@end

然后有一个单独的类(我们称之为它Factory)来负责创建控制器。工厂会记下所有设置,并将所需的设置传递给控制器​​。(GitHub 上有一个示例 Xcode 项目展示了工厂方法,但目前它不包含此特定问题的示例。)

此解决方案的优点是松耦合,您不需要额外的对象(应用程序委托、NSUserDefaults实例或某些Settings类实例)来调整控制器的行为。缺点是更冗长的控制器 API。是否选择这种方法取决于您的设置的性质。

当然,也可以提出混合解决方案。创建一个Settings将保留所有设置的类,用一个不错的 API 公开它们(不再-objectForKey:调用),并将指向对象的指针共享Settings给所有控制器。您不需要单例,请参阅上面链接的 GitHub 示例代码。这意味着更紧密的耦合,但接口中的冗长更少。

于 2012-09-17T06:33:15.893 回答