iphone - 在 Cocoa/Cocoa Touch 应用程序中放置 "Core Data Stack"的位置

标签 iphone cocoa cocoa-touch core-data

在 iPhone 核心数据模板中,Apple 将核心数据堆栈放置在 App Delegate 中。

然而,我最初的倾向是将此代码移动到它自己的类中,该类的职责是处理核心数据堆栈的管理。

您通常会将此功能封装在自己的类中还是将其留在应用程序委托(delegate)中?

最佳答案

总结:不需要创建单例来管理Core Data堆栈;事实上,这样做很可能会适得其反。

核心数据堆栈恰好是由应用程序委托(delegate)创建的。然而,重要的是,正如所有示例所示,堆栈(主要是托管对象上下文)不是直接从堆栈 (*) 检索的。相反,上下文被传递到第一个 View Controller ,并且上下文或托管对象从一个 View Controller 传递到下一个 View Controller (如 Accessing the Core Data Stack 中所述)。这遵循 iPhone 所有应用程序的基本模式:将数据或模型 Controller 从一个 View Controller 传递到下一个 View Controller 。

此处描述的单例的典型角色是作为模型 Controller 。对于 Core Data,托管对象上下文已经是一个模型 Controller 。如果需要的话,它还使您能够访问堆栈的其他部分。此外,在某些情况下(如文档中所述),您可能希望使用不同的上下文来执行一组离散的操作。因此, View Controller 的适当货币单位通常是托管对象上下文,否则是托管对象。使用和传递管理堆栈(并从中检索上下文)的单例对象通常最多会引入不必要的间接级别,而最坏的情况会引入不必要的应用程序刚性。

(*) 没有示例使用以下方式检索上下文:

[[UIApplication delegate] managedObjectContext];

关于iphone - 在 Cocoa/Cocoa Touch 应用程序中放置 "Core Data Stack"的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1267520/

相关文章:

ios - 异步声音

ios - 当推送通知到达设备并将有效负载值传递给目标 ViewController 时,如何在 Appdelegate 上执行 Segue?

ios - 更改工具栏高度时如何防止按钮向右移动?

cocoa - 删除沙盒

iphone - 从 Nib 接收来自 UIView 的触摸事件

macos - 如何为加密图像添加缩略图?

macos - NSTrackingArea 和性能

objective-c - 如何在 iOS 的 NSString 中显示 1/2 的字符?

iphone - 如何在uitableviewcell中创建阴影效果?

iphone - 在 CSS3 中均匀分布菜单选项卡