我正在开发的应用程序有10个控制器。我想在设置屏幕中将一些状态信息共享给5个控制器。以下选项的最佳策略是什么:
哪一个更好?如果还有其他选择,请告诉我。
答案 0 :(得分:2)
NSUserDefaults
解决方案并不是一个糟糕的解决方案,至少如果这些值真的会自然而然地结束。当然forget about the singleton idea,不管是单独的单例类还是app委托。
还有另一种可能性,即减少控制器之间的耦合。而不是依赖于将设置公开为属性的一个特定类,而是将所需的设置作为各个控制器上的属性:
@interface Controller : UIViewController
@property(assign) NSUInteger logLevel; // a sample setting
@end
然后有一个单独的类(让我们称之为Factory
),它将负责创建控制器。工厂会记录所有设置并将控制器传递给它所需的设置。 (有sample Xcode project on GitHub显示工厂方法,但目前它不包含此特定问题的示例。)
此解决方案的优点是松耦合,您不需要额外的对象(app委托,NSUserDefaults
实例或某些Settings
类实例)来调整控制器的行为。缺点是更详细的控制器API。是否选择此方法取决于您的设置的性质。
当然,也可以提出一种混合解决方案。创建一个Settings
类,它将保留所有设置,使用一个不错的API(不再需要-objectForKey:
调用)公开它们,并向所有控制器共享指向Settings
对象的指针。您不需要单例,请参阅上面链接的GitHub示例代码。这意味着更紧密的耦合,但界面的冗长度更低。