有什么技术原因不能让单身人士班级来管理我的核心数据?我现在正在努力做出决定,如果我应该删除所有样板核心数据代码并以单身形式重新实现它。核心数据单身经理?
14
A
回答
14
Xcode模板中应用程序委托中的样板代码在功能上作为单例实现。应用程序对象是一个单例,它只维护一个委托对象,因此您只有一个Core Data堆栈实例,并且由于应用程序对象可以通用访问,所以您始终可以访问应用程序委托。
但是,即使只适用于具有一个持久存储的简单应用程序,并且所有上下文都使用该一个存储。在更复杂的应用程序中,您可能有多个商店或上下文,因此单身人士很快变得太臃肿。
一个单例通常不会为你隐藏或保存重复编码带来很大的复杂性,因为大部分与核心数据有关的编码都在控制器层中,在此模型中将模型链接到视图/接口。由于该逻辑通常是针对每个视图定制的,因此您无法将其停放在单例中。
我过去使用过单身人士,但最终他们通常会证明比他们身价更麻烦。
15
有两个重要的考虑因素(注意:这些都不是只有两个)决定是否单身是适合你的时候:
- 线程
- 内存使用
线程
单身很方便,但如果你的应用程序使用多线程,你可能会试图写是这样的:
[[CDSingleton managedObjectContext] executeFetchRequest:someFetch];
//later on a background thread you might write
NSManagedObject *object = [[CDSingleton managedObjectContext] objectWithID:objectID];
不久之后,你的应用程序会崩溃,因为你已经访问其很可能在主线程中创建一些其他线程managedObjectContext。
内存使用
单身永远不会消失,这是一个单身的地步。因此,他们也从不愿意释放他们所消耗的资源。就CoreData而言,这意味着托管对象上下文将继续在内存中保存托管对象,直到您调用-reset或-save :.
如果您的应用使用大量数据,那可能会很糟糕。
2
最佳做法是在视图控制器之间传递托管对象上下文。苹果的文档和样品就是这样。你永远不应该真的需要访问你的应用程序委托,而不是核心数据,而不是任何事情。
http://www.cimgf.com/2011/01/07/passing-around-a-nsmanagedobjectcontext-on-the-iphone/
相关问题
- 1. 单身人士与核心数据
- 2. 单身经理initWithDelegate
- 3. 核心数据库自身删除
- 4. 核心数据对象的NSArray单身null
- 5. 核心数据:错误:异常被发现在核心数据更改处理
- 6. 核心数据支持的非核心数据数据UITableView
- 7. 核心数据和核心位置
- 8. NSUndoManager撤消不处理核心数据
- 9. 核心数据错误处理NSCFBoolean?
- 10. 核心数据 - 管理对象问题
- 11. 核心数据 - 内存管理?
- 12. 处理iCloud核心数据错误
- 13. 核心数据内存管理
- 14. 核心数据和内容管理器
- 15. 核心数据内存管理
- 16. 核心数据 - 处理动态属性
- 17. 处理核心数据模型更改
- 18. 的iOS - 核心数据 - 完成处理
- 19. 理解添加/核心数据
- 20. 使用核心数据撤销管理
- 21. Xcode管理“核心数据”记录
- 22. 核心数据错误处理
- 23. mach_msg_trap核心数据
- 24. 在核心数据
- 25. 核心数据MO
- 26. UITableView +核心数据
- 27. 核心数据NSFetchedResultsController
- 28. JSON核心数据
- 29. 数据核心NSException
- 30. 核心数据:NSFetchedResultsController
你能解释一下关于线程问题的更多吗?我正在为聊天应用使用单身人士,并且在获取上下文时我的应用崩溃。 – OMGPOP 2014-01-06 16:42:33
如何不能使用单例防止多线程问题?即使您传递上下文指针,仍然只有上下文的一个副本 – OMGPOP 2014-01-06 16:46:50
它鼓励您为特定线程创建实例。如果你传递上下文指针,你创建了一个单例,不管它是否遵循这个模式。 – ImHuntingWabbits 2014-01-06 19:46:48