通过iOS应用程序共享数据的方式是什么?

通过iOS应用程序共享数据的方式是什么?,ios,singleton,nsuserdefaults,appdelegate,Ios,Singleton,Nsuserdefaults,Appdelegate,我正在开发的应用程序有10个控制器。我想在设置屏幕中与5个控制器共享一些状态信息。以下选项中的最佳策略是什么: 使用NSUserdefaults存储并使用状态信息 在AppDelegate实例中存储状态信息并在relavent控制器中使用 使用单例实例维护状态信息并在relavent控制器上使用 哪一个更好?如果还有其他选择,请告诉我。NSUserDefaults解决方案不错,至少如果这些值真的会自然而然地出现在那里的话。当然,无论是单独的单例类还是应用程序委托 还有另一种可能性,减少控制器之

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

  • 使用NSUserdefaults存储并使用状态信息
  • 在AppDelegate实例中存储状态信息并在relavent控制器中使用
  • 使用单例实例维护状态信息并在relavent控制器上使用

  • 哪一个更好?如果还有其他选择,请告诉我。

    NSUserDefaults解决方案不错,至少如果这些值真的会自然而然地出现在那里的话。当然,无论是单独的单例类还是应用程序委托


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

    @interface Controller : UIViewController
    @property(assign) NSUInteger logLevel; // a sample setting
    @end
    
    然后有一个单独的类(我们称之为
    Factory
    ),负责创建控制器。工厂将记录所有设置,并将其需要的设置传递给控制器。(这里有一个显示工厂方法的示例,但目前它不包含此特定问题的示例。)

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


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

    在基于情节提要的应用程序中,您如何保持这种方法?我希望有一个中心类来保存状态并在控制器之间共享它。我是否应该在控制器中惰性地初始化这个类,然后通过分段将它传递给感兴趣的各方(其他控制器)?那不是很简单吗?对不起,不知道。我仍然手工连接UI流,原因之一是我可以更好地控制流程。