4

目前我正在使用单例类来做一些工作,但我想知道是否有更好的东西。

我有一个具有完全动态工作流程的应用程序。它使用导航控制器,但视图控制器的顺序完全取决于从我们的服务器下载的一些数据。

整个工作流程被下载并保存在一个数组中。

应用程序的“主菜单”屏幕有几个选项(设置、最近等),这些选项是固定的,但其中之一是动态选项。它总是以相同类型的视图控制器开始,但从那时起它取决于您选择的内容。

描述

这些动态控制器有 4 种不同类型。

  • 具有单一选择和详细指标的表视图控制器。
  • 具有多项选择和复选标记的表视图控制器。
  • 带有文本字段和键盘的视图控制器。
  • 用于在服务器上搜索帐户的视图控制器(以及其他相关的 VC)。

当您按下主菜单上的“新事件”选项时,菜单会转到单例 (EventManager) 并告诉它开始一个新事件。

然后单例将单个选择动态视图推送到导航控制器上并为其提供初始选项。

从这里开始,单例选择所有的选择并计算出接下来需要什么类型的视图。

我希望这是有道理的

无论如何,我不喜欢这里的单例模式,因为我认为它不应该是单例。

我想要的是一个可以从 ViewController 创建的类,然后该类将控制不同视图控制器负载之间的数据推送和弹出以及数据流。然后当你回到主菜单时,这个类可以消失,所以我每次都创建一个新类。

有没有我可以看到的模式可以做到这一点?还是我应该像现在这样坚持单身?

我希望这是有道理的。

编辑

我可以为此使用 UIPageViewController 吗?然后 UIPageViewController 的数据源/委托对象将取代我目前正在使用的单例......还是什么?

从推特请求中添加照片

在此处输入图像描述

流程中的每个 VC 都不知道它之前的凸轮或接下来的凸轮。他们所做的只是回调单身人士说“选择了这个值”或“输入了这个文本”等......

然后单例存储该信息并计算出接下来会发生什么并将下一个 VC 推入堆栈。

它需要能够沿堆栈向后移动,以便用户可以返回更改某些内容等...

一切正常,我只是不喜欢使用单例。

4

1 回答 1

1

这里有很多评论,按重要性排序。

你在这里描述的一切听起来都很好,甚至是命名。“EventManager”听起来像是管理系统中的所有“事件”(所以我希望有一个名为 的类Event,但这是一个小问题,名字可能仍然很好)。还有其他好的设计,但我对你的没有任何问题。

我同意这看起来确实很适合UIPageViewController. 你当然应该调查一下,看看它是否合适。如果可以的话,使用内置控制器总是很好的。

没有理由强烈避免单例。它们是 iOS 开发的自然组成部分,在良好的 Cocoa 设计中相当普遍。它们通常应该是“共享”单例(永远不要创建覆盖的“严格”单例+allocWithZone:)。这只是创建了一个易于访问的实例,而不是真正的“单例”。这就是事情的NSNotificationCenter工作方式,通常是一个非常好的模式。

当系统的许多随机部分需要直接访问它们并且将它们传递给每个人将是很多开销时,单例是最好的(特别是如果您必须传递对象的许多部分自己不需要它) . 再想想NSNotificationCenter。如果它的用户大多是连续的(即大多数对象你会传递它以实际需要它),那么只需在程序开始时创建一个并传递它。这听起来像你的情况,所以你对它的直觉似乎很好。只需将其取消单例并通过即可。容易改变。

但我肯定会深入研究UIPageViewController。它可以很好地匹配您的问题。

于 2012-12-12T15:40:47.277 回答