Xcode 26中「nonisolated(sending) by Default」与「Default actor isolation」设置是否冲突?
全局函数在「Default Actor Isolation」与「nonisolated(sending) by Default」同时开启时的隔离规则
当同时启用这两个Xcode编译设置时,不会产生冲突,规则会根据函数是否为异步类型分别生效:
1. 同步全局函数(如syncMethod())
「nonisolated(sending) by Default」仅作用于异步函数,因此同步函数不受该设置影响,依然会被「Default actor isolation」自动添加@MainActor注解,最终效果如下:
@MainActor func syncMethod() { // 可以正常访问Main Actor的隔离成员 }
2. 异步全局函数(如asyncMethod() async)
此时「nonisolated(sending) by Default」的优先级更高,异步函数会被自动标注为nonisolated(sending),而不会继承全局默认的@MainActor隔离,最终效果如下:
nonisolated(sending) func asyncMethod() async { // 属于非隔离函数,无法访问Main Actor的隔离成员 // 调用时会在调用者的上下文执行,避免不必要的actor切换 }
补充说明
这两个设置的设计目标并不冲突:
- 「Default actor isolation」是为全局范围内的同步/异步函数提供统一的默认隔离上下文;
- 「nonisolated(sending) by Default」是针对异步函数的优化,减少无意义的actor切换开销,因此会覆盖异步函数的默认actor隔离规则。
内容的提问来源于stack exchange,提问作者HL666
相关产品推荐
相关产品推荐

