0

我有一个理论实践问题。我不明白我必须怎么做。我有一个类,我们称它们为 DataManager,它管理所有 plist 读写操作,我需要从不同的 UIViewController 访问 plist(即使用该 DataManager 类)。

我也有一个类,我称之为 ModelManager,它适用于所有类型的“实用程序类”,包括我的 DataManager。ModelManager 目前只适用于一个复杂的 UIViewController,为了清楚起见,我们称它为 MainUIViewController。现在,我认为来自 UIViewControllers 的所有调用都将来自 ModelManager 并从它到结束调用类。但现在我很困惑。

这是我的架构的插图:

在此处输入图像描述

我看到了不同的方法,不知道如何决定以及是否有一些规则或指南。所以,这是我的选择:

1)我向ModelManager添加了一些接口,并从我的另一个UIViewController(不是MainUIViewController)分配并初始化它。

2) 我向 ModelManager 添加了一些接口,并在另一个 UIViewController 中创建了一个引用 ModelManager 的属性,并且当 segues 执行时从 MainUIViewController 设置此属性。

3) 使用 DataManager 本身并从另一个 UIViewController 分配和初始化它

4) 使用 DataManager 本身并参考另一个 UIViewController 中的 DataManager 创建一个属性,当 segues 执行时从 MainUIViewController 设置此属性。

哪种方法是正确的?

我知道这取决于开发人员选择哪种方法,但我从未阅读过,也没有找到任何关于如何开发多类架构的教程或指南。

问我任何你想知道的情况。

4

1 回答 1

1

您可以使用单例,也可以在应用程序委托中实例化该类的一个实例,并通过每个控制器上的 @propertys 将其传递给所有视图控制器。没有正确的答案,这主要是一个偏好问题。我更喜欢将我的 ModelManager/DataManager 类型类设为单例,但很多人都强烈反对单例。但是,如果您使用 Cocoa 工作一段时间,您会发现它充满了它们(NSUserDefaults、NSFileManager、UIDevice,可能还有一些我忘记了)。

这是一个关于如何创建单例的好例子:http ://www.galloway.me.uk/tutorials/singleton-classes/

顺便说一句:一旦你有了你的单例,学习如何使用 KVO 让你的视图控制器响应模型中的变化。一旦你掌握了它,这真是太棒了。 http://nshipster.com/key-value-observing/

于 2013-11-14T23:50:35.503 回答