Core Data 改革:实现 SwiftData 般的优雅并发操作

Core Data 改革:实现 SwiftData 般的优雅并发操作

💡 原文中文,约8100字,阅读约需20分钟。
📝

内容提要

SwiftData是Core Data的后继者,引入了创新和现代化的设计思想。尽管SwiftData在操作系统版本要求和功能方面存在一些限制,但可以将其优雅和安全的并发操作融入到Core Data中。通过自定义Actor执行者和@NSModelActor宏,可以实现类似SwiftData的并发操作。这为Core Data的并发编程提供了简化和改进的方法。

🔎

延伸解读

为何需要将 SwiftData 的并发理念引入 Core Data

SwiftData 虽然设计现代,但对操作系统版本要求高且功能尚不成熟,导致许多开发者仍在使用 Core Data。Core Data 的并发操作依赖开发者手动遵循托管对象与上下文线程绑定的规则,编译器无法提供帮助,容易出错。通过借鉴 SwiftData 的 Actor 和 @ModelActor 设计,可以在 Core Data 中实现更安全、简洁的并发操作,减少对 perform 方法的依赖。

自定义执行者如何保证 Core Data 的线程安全

Core Data 要求托管对象只能在所属上下文的线程上操作,而 Actor 默认不指定执行线程。通过实现 SerialExecutor 协议,创建自定义执行者,将任务提交到托管对象上下文的 perform 方法中执行,可以确保 Actor 内的所有操作都在正确的线程上串行执行。这利用了 Swift 5.9 的自定义 Actor 执行者特性,为 Core Data 提供了类似 SwiftData 的并发安全保障。

@NSModelActor 宏带来的开发体验提升

为了简化自定义执行者和 Actor 的繁琐设置,文章引入了 @NSModelActor 宏。该宏自动为 Actor 添加必要的属性、构造器,并使其符合 NSModelActor 协议,从而提供与 SwiftData 的 @ModelActor 相似的开发体验。开发者只需在 Actor 上标注该宏,即可获得一个线程安全、支持下标访问托管对象的并发操作环境,显著减少了样板代码。

当前限制与未来展望

自定义执行者依赖的 SerialExecutor 和 ExecutorJob API 仅支持 iOS 17、macOS 14 及以上系统,无法在更低版本中使用。这限制了该方案在旧项目中的直接应用。作者希望苹果能将这部分 API 兼容到更低版本,并已将相关代码整合至 CoreDataEvolution 库中,鼓励开发者学习新框架的设计理念,以优化传统框架的开发方式。

❓

Q&A

SwiftData与Core Data有什么区别?

SwiftData是Core Data的后继者,引入了现代化设计思想,但对操作系统版本要求较高,功能尚不成熟。

如何在Core Data中实现类似SwiftData的并发操作?

可以通过自定义Actor执行者和@NSModelActor宏,将SwiftData的并发操作理念融入Core Data中。

自定义Actor执行者的作用是什么?

自定义Actor执行者允许开发者替换Actor的默认任务调度机制,以确保Core Data操作在正确的线程上执行。

什么是@NSModelActor宏,它有什么用?

@NSModelActor宏简化了Core Data的并发操作,使开发者能够享受与SwiftData相似的开发体验。

Core Data的并发操作需要遵循什么原则?

Core Data的并发操作需遵循托管对象在其上下文及线程中操作的原则。

SwiftData如何简化并发操作?

SwiftData通过现代并发模型避免了繁琐的perform方法,允许数据操作逻辑封装在一个Actor中。

🏷️

标签

➡️

继续阅读