3 回答
TA贡献1817条经验 获得超14个赞
简介:无需创建一个单一实例即可管理核心数据堆栈。确实这样做可能适得其反。
核心数据堆栈恰巧是由应用程序委托创建的。但是,重要的是,如所有示例所示,并不是直接从stack(*)中检索堆栈(主要是托管对象上下文)。而是将上下文传递到第一个视图控制器,并将上下文或托管对象从上下文将它们从一个视图控制器传递到下一个视图控制器(如访问核心数据堆栈中所述)。这遵循iPhone所有应用程序的基本模式:将数据或模型控制器从一个视图控制器传递到下一个视图控制器。
如此处所述,单例的典型角色是作为模型控制器。对于Core Data,托管对象上下文已经是模型控制器。如果需要,它还使您能够访问堆栈的其他部分。此外,在某些情况下(如文档中所述),您可能希望使用其他上下文来执行一组离散操作。因此,视图控制器的适当货币单位通常是托管对象上下文,否则是托管对象。使用和传递一个管理堆栈(并从中检索上下文)的单例对象通常最多会引入不必要的间接级别,而最坏的情况会导致不必要的应用程序僵化。
(*)没有示例使用以下方法检索上下文:
[[UIApplication delegate] managedObjectContext];
TA贡献1877条经验 获得超6个赞
我有一个单例类,可以让我做我的核心数据管理,而且我不把它留在应用程序委托中。我宁可不要使用我可能需要说服性的方法(例如,获取某些对象等)使应用程序委托类混乱
TA贡献1909条经验 获得超7个赞
由于以下原因,我将核心数据逻辑留在了App委托中:
1)在其他类别中移动此代码时,我看不出任何真正的优势:委派的概念完全由App委托处理的核心数据逻辑实现,因为核心数据模型实际上是应用程序的基本部分;
2)在我看到的所有示例代码中,包括Apple示例,核心数据都是由App委托处理的;
3)即使在Core Data书籍中,让App委托人处理与核心数据相关的代码也是一种惯例;
4)就个人而言,我不认为通过为核心数据设置临时类实际上可以提高可读性或其他任何功能,但这是个人喜好问题,在这里我不会争论哪种方法是最佳方法。对我来说,保持功能的简单性很重要。
- 3 回答
- 0 关注
- 485 浏览
添加回答
举报