注意:当我在 2012 年写这篇文章时,这个 API 是最前沿的,细节已经改变。如果您愿意,请随时更新。我目前没有从事任何 Cocoa/ObjC 项目,所以很遗憾,我不是一个保持最新状态的好人。看来总体要点是正确的。
NSManagedObject
Core Data 提供了一组帮助管理对象持久性的工具,即能够保存然后从某种存储中取回对象集( )。
当您使用 Core Data 对象时,您使用的是NSManagedObjectContext
从NSPersistentStoreCoordinator
. PSC 反过来与一个或多NSPersistentStore
个子类进行对话,这些子类处理商店的实际操作。(考虑针对数据库创建/读取/更新/删除。)
Core Data 支持两种主要类型的存储:NSPersistentStore
和NSAtomicStore
. 可以将持久存储视为数据库:您可以增量地保存、更新和从中获取任意记录集。原子存储是对象图的“全有或全无”表示。它旨在成为结构化文件的内存表示。
Core Data 自带的 store 类型有:
NSSQLLiteStoreType
( NSPersistentStore
)
NSInMemoryStoreType
( NSPersistentStore
)
NSXMLStoreType
( NSAtomicStore
)
NSBinaryStoreType
( NSAtomicStore
)
NSPersistentStore
被明确禁止子类化,所以直到现在,还没有办法创建自己的非原子存储后端。也就是说,如果您想零碎地保存和查询对象的表示,而不是一大堆(“加载整个图”、“保存整个图”),那么您就很不走运了。直到 iOS5 推出NSIncrementalStore
。
NSIncrementalStore
是一个抽象类(继承自NSPersistentStore
),您实现其方法以在您控制的数据存储和 Core Data 世界之间提供适配器。您可以使用它来包装远程 API,或者如果您愿意,您可以包装NULevelDB或NanoStore 之类的东西(尽管我不确定您为什么要这样做)。