ios - UIManagedDocument vs NSManagedObject : Performance

标签 ios cocoa-touch core-data ios7 uikit

我正在尝试编写一个 iOS 笔记应用程序,该应用程序对于大量笔记来说速度非常快,并且可以在不阻塞 UI 的情况下进行同步。 (别担心,这只是一个学习项目,我知道 iOS 有十亿个笔记应用程序)。我决定使用 Core Data(主要是因为 Brent Simmons 关于 Vesper 的优秀帖子)。我知道 UIManagedDocument 可以进行异步读取和写入,并且内置了很多功能,所以我想知道是否有任何信息表明对于一个相当简单的笔记应用程序来说哪个会更快。除了集中的、基本上是单例的、持久的存储之外,我真的找不到很多关于人们使用 UIManagedDocuments 的信息。它适用于 1000 份文件吗?它会比 NSManagedObjects 的数据库更快还是更慢?似乎我能找到的关于 Core Data 的大多数信息都是面向使用 NSManagedObject 的人,所以任何关于在生产应用程序中使用的 UIManagedDocuments 的信息都会非常有帮助。在这一点上,我唯一能想到的就是双向编写整个应用程序,将 10,000 个笔记加载到其中,然后看看会发生什么。

更新
澄清一下,我不是在学习 iOS 开发和 Objective-C,“学习项目”主要意味着我从未使用过 Core Data,并且想学习如何编写一个真正高性能的 Core Data 应用程序。

最佳答案

UIManagedDocument设计/旨在用于基于文档的应用程序。一个UIManagedDocument每个文档的实例。如果您不构建基于文档的应用程序,那么您应该 不是 正在使用 UIManagedDocument .

人们喜欢的一切UIManagedDocument可以直接使用 Core Data 堆栈轻松完成。 UIManagedDocument将您从持久层所做的事情中抽象出来。你真的不想要的东西。

如果您想要一个高性能的 Core Data 应用程序,您不想使用 UIManagedDocument .你会遇到它的问题。它会在随机时间做一些事情并导致性能问题。

正确地学习框架会好得多。

对于 Vesper,这些不是文件;它们太小了。将文档视为 Word 文件或 Excel 文件。 100% 相互隔离的大型复杂数据结构。

此外,无论您使用 UIManagedDocument与否,您将使用 NSManagedObject实例。 NSManagedObject , NSManagedObjectContext , NSPersistentStoreCoordinator都是 Core Data 中的基础对象。 UIManagedDocument只是顶部的一个抽象层。

最后,Core Data 不是数据库。这样想会让你陷入困境。 Core Data 是一种可以持久化到磁盘的对象模型,其中一种持久化格式恰好是 SQLite。

更新(遇到问题)
UIManagedDocument是核心数据之上的抽象。使用 UIManagedDocument你真的需要学习更多 与仅使用主 Core Data 堆栈相比。
UIManagedDocument在内部使用父/子上下文。还不明白吗?见上点。这也意味着您对它的保存请求是“在建议下采取的”,而不是当场被保存。如果您不了解它的意义或不想在需要时保存它,这可能会导致意想不到的结果。
UIManagedDocument使用异步保存,最多您可以请求它保存。并不意味着它现在要保存,也不意味着您可以轻松停止并等待保存完成。你需要相信它会完成它。此外,它可能决定在不合时宜的时候进行保存。

当您开始寻找 Core Data 的性能提升时,您往往希望以一种非常具体的方式构建堆栈,以最大限度地为您的应用程序带来好处。这取决于应用程序,并在 UIManagedDocument 中提供摘要你很快就会受到限制。

即使在构建基于文档的应用程序的情况下,我也会 还是 不使用 UIManagedDocument .就在幕后。

关于ios - UIManagedDocument vs NSManagedObject : Performance,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22029914/

相关文章:

ios - iOS 开发需要什么 Contents.json?

ios - iPad 未出现在 Storyboard 中的 "view as"部分

ios - 在 iPhone 上调用号码

c++ - 将 C++ 类的实例转换为 NSObject,然后添加到 NSMutableArray

objective-c - 具有多个商店的 CoreData : configuration woes

objective-c - 在不同的托管对象上下文中看不到 ios coredata 更新 - 上下文之间的数据不同

ios - 如何在我的 AppDelegate.swift 中向 Workmanager 注册 "specific plug-in"?

ios - UISplitViewController,使MasterView以编程方式出现在纵向iOS 8中

objective-c - 如何将 UITextView 中的第一行文本保存为 UIView 的标题?

ios - 核心数据堆栈的多个实例