ios - CoreData - 对 ManagedObjectContext 使用 AppDelegate、单例或 View Controller 上的属性?

标签 ios objective-c design-patterns core-data uiviewcontroller

处理 CoreData managedObjectContexts 的首选方式是什么?为什么?

我经常看到三种不同的方式,以及一种额外的方式:

  • AppDelegate中声明并让 View Controller 依赖于AppDelegate
  • 一个sharedManager单例类
  • 每个 View Controller 上的属性并让父 View Controller 设置它

  • UIViewController 的类别,公开共享的manageObjectContext

您认为每种方法的优缺点是什么?

最佳答案

Declare in AppDelegate and let the view controller depend on the AppDelegate

恶心。应用程序委托(delegate)不应参与,因为数据模型不是应用程序级别的委托(delegate)事件。所有其他类都依赖于应用程序委托(delegate)也是不合适的。

Apple 在示例代码中采用此选项是因为它很简单,但这并不意味着它就是正确的。

A sharedManager singleton class

提供良好的知识管理、放置迁移逻辑的良好位置(如果需要在映射模型之外),并且可以将整个应用程序从应用程序中的任何远程同步方面抽象出来。

很多人不喜欢单例(全局状态),但它们确实有其用处。

Property on each view controller and let the parent view controller set it

非常好 - 但取决于(根)父级首先从哪里获取 MOC。

A category for UIViewController that expose the shared manageObjectContext

同样,取决于 MOC 的来源。这比在整个代码中显式引用更好地隐藏了知识,但与错误的类的交叉耦合仍然很糟糕。

关于ios - CoreData - 对 ManagedObjectContext 使用 AppDelegate、单例或 View Controller 上的属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22146163/

相关文章:

c++ - 谁应该拥有迭代器、我的数据类或该类中的实际列表?

ios - 如果用户输入不符合预设标准的数据,我需要快速将光标重新定位在文本字段中

ios - 取出内部 NSMutableDictionary iOS 的 valueForKeys

iphone - 旋转后UIView图层阴影变暗

java - 对于大型验证任务,责任链模式是一个不错的选择吗?

oop - 我应该如何决定哪个类负责对象创建?

ios - 如何取消绑定(bind)或清除 MvvmCross 流式绑定(bind)

ios - 如何快速履行零 promise

objective-c - Osascript - 无输出

objective-c - UIActionSheet showInView 上的 iPad NSInternalInconsistencyException