build setting,更改 swift version 到 swift 6。
打开 Strict Concurrency Checking,到 Complete。
Xcode build 后,查看 warning。
全局变量初始化,是否会造成 data-race?
不会,虽然 Swift 全局变量是懒加载的。但 Swift 全局变量初始化,是数据安全的。全局变量如何去除 data- race 的警告?
如果不会更改这个变量,则使用let
, 即为最优解。
使用 MainActor,则这个变量的更改都会在 MainActor 下执行。
标记为 unsafe。跨 Actor 传递值类型。
标记为Sendable
, 对于值类型中的 class 或者一些 OC Type,
需要标记nonisolated(unsafe)
,来去除 warning。对于用 MainActor 标记的类,那些代理方法如何处理?
标记那些未知的代理方法nonisolatetd
, 方法中,
使用MainActor.assumeIsolated { }
, 标记运行的 Actor。
使用MainActor.run { }
,强制在 MainActor 执行。