0

背景: 我正在概括我刚刚继承的 iOS 项目的某些方面。我想要的一件事是从应用程序中的任何地方可访问的数据结构,用户控件可以访问特定于应用程序的样式信息(UIColor定义等)。

问题:如果我定义了一个包含需要“全局”访问的数据的数据结构,那么在哪里被认为是实例化该对象的正确位置,以及其他对象获取对它的引用的正确方法是什么?一些研究发现了以下选项:

  • 创建数据结构作为 my 的属性AppDelegate;初始化它applicationDidFinishLaunching;通过访问它((myAppDelegate *)[UIApplication sharedApplication].delegate).getStyleDefs
  • 使结构成为全局单例(延迟加载或急切地从 实例化AppDelegate)。

我还有什么其他选择?

4

2 回答 2

2

Matt Gallagher 关于单例、AppDelegates 和顶级数据的文章是关于在 Objective C 中处理此问题的各种方法的优缺点的一个很好的参考。非常简短的总结是:使用单例。

其他地方反对单身人士的主要论据大致分为两个阵营:

  1. 如果您需要这种全局对象,那么您首先做错了。这通常是个好建议,但您似乎已经决定走这条路。请注意,应用程序委托模式只是劫持了一个 Cocoa 自动为您创建的单例,并在其上挂了更多东西。所以它并不是真正从单身人士中解脱出来的。
  2. 单例不应该是其他语言中的意义上的真正单例。传统的单例实际上强制禁止在您的应用程序中只能实例化一个。在 Objective C 中,我们主要使用单例,其中有一个由类方法为您创建的默认对象,但如果您愿意,您可以创建更多。Apple 的课程相当普遍地使用它。在预计您不会创建更多类方法default*的情况下,类方法以 开头,而在您可能以shared*.

注意要实例化你的单例,最好的现代方法是使用 Grand Central Dispatch,如本关于 Objective C 单例的说明中所述。

于 2012-07-25T09:44:27.193 回答
0

也许创建一个名为的单独文件SharedConstants(.h/.m),并在其中提供所有应用程序范围的常量。

把类似的东西

#define sharedColor [UIColor colorWithRed...]

.m文件的版本中,然后您将能够在包含该SharedConstants.h文件的任何其他类中使用它。

于 2012-07-25T09:40:15.947 回答