在 Core Data 中获取和更新,或者创建和删除 NSManagedObject?

Posted

技术标签:

【中文标题】在 Core Data 中获取和更新,或者创建和删除 NSManagedObject?【英文标题】:Fetch and update, or create and delete NSManagedObjects in Core Data? 【发布时间】:2013-12-20 06:27:56 【问题描述】:

我只是好奇,想知道以下问题是否有“良好做法”的答案:

如果我在 Core Data 中有一个轻量级的 NSManagedObject 子类,其中对象将被频繁地创建和删除,并且子类本身相当简单(例如,一个关系,最少的属性),是否建议根据需要创建和删除实例还是根据需要设置和取消设置现有实例?

例如,假设我们有一个名为 Tag 的理论 NSManagedObject 子类,它与另一个子类 MyObject 有关系。 MyObject 可以有许多 Tag 对象,但每个 Tag 最多有一个 MyObject 对象。 Tag 有一个属性,text,它是一个用户设置的 NSString。

在上述情况下,我可以想到两种不同的实现方式:

创建和销毁:当您需要一个新的Tag 时,您可以创建一个新的Tag。当你想删除 Tag 时,你可以从 Core Data 中删除它。 更新和重用:当您需要一个新的Tag 时,您首先使用text = nil 搜索现有的Tag 对象,如果所有现有的Tag 对象都已创建,则仅创建一个新的Tag 对象用过的。当您想要移除 Tag 时,您需要移除它与其 MyObject 对象的关系并设置 text = nil

“创建和销毁”似乎更简单,并且占用的空间完全符合它的需要,但“更新和重用”可以最大限度地减少删除和创建对象的次数。 (我会想象删除save 上的备用Tag 对象并跟踪未设置的Tag 对象,这样您就不必每次都从Core Data 中获取。)

您会推荐哪种实现方式?有没有我没有想到的不同实现?我是否提出了错误的问题/没有提供足够的详细信息?

我想我可以制作一个示例 Xcode 项目并自己进行测试,但我猜您将获得更明智的意见/更多经验,而不仅仅是针对时间和内存进行优化。

【问题讨论】:

【参考方案1】:

创建和销毁是最佳实践。当您的应用程序变得更复杂并且风险合并问题时,重用会产生影响。插入和更新之间的成本差异很小。

【讨论】:

以上是关于在 Core Data 中获取和更新,或者创建和删除 NSManagedObject?的主要内容,如果未能解决你的问题,请参考以下文章

Core Data,我如何有效地查找和删除托管对象

Core Data 在更新旧对象时创建一个新对象

Core Data + iCloud 如何处理来自云端的数据更新

Core Data SQLite 存储在更新后变为只读

在使用 NSFetchedResultsController 更新 UITableView 时将来自 Web 的数据保存到 Core Data

如何在 Core Data iOS Swift 中删除和更新结构类型数组?