RealityKit的postProcess渲染回调是否应标注@Sendable?
关于RealityKit中ARView.postProcess闭包缺少@Sendable标注的疑问
先明确几个关键信息:
ARView的renderCallbacks属性被标注为@MainActor,所以对它的赋值操作必须在主线程完成- 但
renderCallbacks.postProcess这个闭包实际是在渲染线程触发执行的 - 当前官方API里这个闭包并没有标注
@Sendable
按照Swift并发安全的规则,任何需要跨线程传递并执行的闭包,都应该标注@Sendable——这样编译器可以帮我们检查闭包捕获的变量是否具备线程安全性,避免潜在的数据竞争问题。
而这里的postProcess闭包明显是从主线程(MainActor上下文)传递到渲染线程执行的,完全符合需要@Sendable标注的场景。所以从逻辑上来说,这确实应该是Apple在API设计或文档标注上的遗漏。
举个实际代码场景:
// 此代码在主线程执行 self.renderCallbacks.postProcess = { context in // 此回调在渲染线程执行 }
这段代码里,赋值动作受@MainActor约束在主线程,但闭包本身会被传到渲染线程运行,没有@Sendable标注的话,编译器无法帮我们做并发安全检查,存在潜在风险。
内容的提问来源于stack exchange,提问作者HL666
相关产品推荐
相关产品推荐

