微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

核心数据单例管理器?

如何解决核心数据单例管理器?

| 有什么技术原因不让单例课程管理我的核心数据?如果要删除所有样板代码核心数据代码并在一个实例中重新实现,我现在正在尝试做出决定。     

解决方法

        Xcode模板中应用程序委托中的样板代码在功能上实现为单例。该应用程序对象是一个单例对象,并且仅维护一个委托对象,因此您只有一个Core Data堆栈实例,并且由于该应用程序对象是可普遍访问的,因此您也始终可以获取该应用程序委托。 但是,即使这样也仅适用于具有一个永久性存储的简单应用程序,并且所有上下文都使用该一个存储。在更复杂的应用中,您可能拥有多个商店或上下文,因此单身人士很快就会变得too肿。 单例通常不会给您带来太多隐藏或保存重复编码的麻烦,因为您与Core Data所做的大部分编码都在控制器层中,您可以在其中将模型链接到视图/界面。由于该逻辑通常是针对每个视图定制的,因此您实际上无法将其停在单例中。 过去我曾经使用过单例,但最后它们通常比其价值更麻烦。     ,        在确定单身人士是否适合您时,有两个重要的注意事项(请注意,这不是唯一的两个): 穿线 内存使用情况 穿线 单例很方便,但是如果您的应用程序使用多个线程,您可能会想编写如下代码:
[[CDSingleton managedObjectContext] executeFetchRequest:someFetch];
//later on a background thread you might write
NSManagedObject *object = [[CDSingleton managedObjectContext] objectWithID:objectID];
在那之后不久,您的应用程序将崩溃,因为您已经访问了ManagedObjectContext,该对象很可能是从其他线程在主线程上创建的。 内存使用情况 单例永远不会消失,这就是单例的意义。因此,他们也从不乐意释放其消耗的资源。对于CoreData,这意味着托管对象上下文将继续在内存中保存托管对象,直到您调用-reset或-save:为止。 如果您的应用程序使用大量数据,那可能会很糟糕。     ,        最佳实践是在视图控制器之间传递托管对象上下文。 Apple文档和示例可以做到这一点。您绝对不必真正访问应用程序委托,而不是访问Core Data,而不是任何东西。 http://www.cimgf.com/2011/01/07/passing-around-a-nsmanagedobjectcontext-on-the-iphone/     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。