(以下都是个人简单的理解,不一定十分精确,随着版本的变化,可能有较大的改动。CoreData是个麻烦但好用的东西,如果有兴趣,可以研究一下,对于普通应用来说,一般了解就足够了)
CoreData和Database都提供了持久化数据的功能,并且CoreData通常被认为是对SQLite的封装,但是,CoreData和Database还是有很大程度的不同,两者都拥有对方不能提供的功能,而且性能也有很大差别。
DataBase的主要功能就是持久化数据。但是关系型数据库(基于row的表格)实际上不能保存类和类之间的关系,对于每一个row来说,也只有读和写着2个操作,用户也没有办法自定义操作或者,扩展数据库。
而CoreData相比DataBase,它提供了一个生命周期管理,关系查找的管理工具。这个工具包含以下功能:
1 可以将类A和类B进行关联, 关联之后,他们会永久同步。
2 如果修改了类A,B类将自动更新,并触发notification
3 删除一端的类会引起联级删除或者无效响应
4 慢装载。不是所有的关联都要一次性完全载入内存。
和DataBase不同的是,CoreData是可以完全存在与内存中的,虽然它经常被称为“持久化”框架,但是CoreData不一定要使用它的持久化框架,所以, 持久化只是Coredata的主要功能,而不是必须功能。
CoreData可以不需要任何搜索,如果你正确的生成并且连接了所有的类,只需要持有其中的一个类,你就可以获得所有的类而不需要使用fetch request,但是缺少搜索的功能并不能说明CoreData就是完全不提供搜索的,只是一旦数据被装载到了内存中,就不太需要传统数据库的搜索功能了。
所有的CoreData都是使用Objc的类来完成的,Objc掌管其所有的属性,关系和生命周期。但是CoreData不能在没有把数据装载入内存的情况下进行任何操作