标记@MainActor的类,其扩展是否也归属主Actor?
关于@MainActor类的扩展归属问题
是的,当一个类被标记为@MainActor时,它的所有扩展默认都会归属于@MainActor上下文。
具体说明:
- 在Swift中,类的
@MainActor属性会被其所有扩展继承,扩展内的方法、属性、下标等成员默认都会绑定到主actor,即默认在主队列执行。 - 对应示例:
@MainActor class MyClass : NSObject { } // 该扩展默认归属于MainActor extension MyClass { func mainBoundMethod() { // 此方法默认在主队列执行 } }
例外场景:
如果需要让扩展脱离@MainActor上下文,可以显式使用nonisolated修饰扩展,或者指定其他actor:
// 脱离MainActor的扩展 nonisolated extension MyClass { func nonMainMethod() { // 此方法不在主队列执行 } } // 指定其他自定义actor的扩展 @CustomGlobalActor extension MyClass { func customActorMethod() { // 此方法在CustomGlobalActor指定的队列执行 } }
内容的提问来源于stack exchange,提问作者meaning-matters
相关产品推荐
相关产品推荐

