所以我一直在试图找出演员与@MainActor 的工作方式之间的区别?它们是针对同一问题的不同解决方案吗?我怎么知道该选哪一个?
actor AViewModel: ObservableObject {}
@MainActor class AViewModel: ObservableObject {}
他们对同一问题有不同的解决方案吗?我怎么知道该选哪一个?
我在网上找不到解决方案。
MainActor
只是一个与主线程隔离的参与者。或者,正如文档所说,它是“一个单例参与者,其执行者相当于主调度队列。”
因此,当我们需要 actor 行为并且希望避免使用主线程时,我们会使用
actor
模式。当我们确实希望它使用主线程时,我们使用 MainActor
。
您给出了“视图模型”的示例。这通常是与我们应用程序的“视图”交互的对象,它始终需要位于主线程上。因此,视图模型是我们通常使用
@MainActor
模式的示例。事实上,Apple 在“发现 SwiftUI 中的并发”和“Swift 并发:更新示例应用程序”视频中明确建议我们这样做。
简而言之,如果您需要主线程,请使用@MainActor
模式。在那些不需要明确位于主线程上的情况下,我们通常会使用 actor
模式。