6️⃣事例別!Strict Concurrency対応方法2024/08/05に公開2025/04/175件SwiftSwift 6techDiscussionYuta Koshizawa2024/08/05deinit の例は、 nonSendableObserver が Foo インスタンスの内部からのみの利用で安全であれば( MainActor isolatedなメソッドと deinit からのみのアクセスであれば、メソッド同士は排他的だし deinit が呼ばれるときにインスタンスメソッドが呼ばれていることはないので、同時にアクセスされることはないので)、 nonisolated(unsafe) にするのはどうでしょう? matsuji2024/08/05コメントありがとうございます! actorの中でnonisolatedを書くことも多くはないでしょうし、シンプルで良い方法に思いました。 そのアイデアを追加させていただきました。ありがとうございました! nonisolated(unsafe)を付け足す 返信を追加uhooi2024/09/18素晴らしい記事をありがとうございます…! しかし、場合によってはどうしてもactorにできない場合があります。 こちらの記述が気になったのですが、 actor にできない場合はあるのでしょうか? 「したくない」場合はあると思うのですが、「できない」場合があるのかわからなかったので気になりました…! matsuji2024/09/18コメントありがとうございます。 考えられるケースとしてはいくつかありますが、一番現実的なケースだと呼び出し箇所が多すぎる場合です。 actorにすると、呼び出し箇所でSwift Concurrencyを使うことが強制されます。 新規プロジェクトなら問題にならないかもしれませんが、すでにリリースされている大規模なアプリだと、まだまだSwift Concurrencyが使えないコードも多いと思います。そういう場合actorにできないと思います。(技術的には可能ですが、現実的には不可能な場合という意味です。) uhooi2024/09/19なるほど、それなら納得です…! ありがとうございます🙏✨ 返信を追加
Yuta Koshizawa2024/08/05deinit の例は、 nonSendableObserver が Foo インスタンスの内部からのみの利用で安全であれば( MainActor isolatedなメソッドと deinit からのみのアクセスであれば、メソッド同士は排他的だし deinit が呼ばれるときにインスタンスメソッドが呼ばれていることはないので、同時にアクセスされることはないので)、 nonisolated(unsafe) にするのはどうでしょう? matsuji2024/08/05コメントありがとうございます! actorの中でnonisolatedを書くことも多くはないでしょうし、シンプルで良い方法に思いました。 そのアイデアを追加させていただきました。ありがとうございました! nonisolated(unsafe)を付け足す 返信を追加
matsuji2024/08/05コメントありがとうございます! actorの中でnonisolatedを書くことも多くはないでしょうし、シンプルで良い方法に思いました。 そのアイデアを追加させていただきました。ありがとうございました! nonisolated(unsafe)を付け足す
uhooi2024/09/18素晴らしい記事をありがとうございます…! しかし、場合によってはどうしてもactorにできない場合があります。 こちらの記述が気になったのですが、 actor にできない場合はあるのでしょうか? 「したくない」場合はあると思うのですが、「できない」場合があるのかわからなかったので気になりました…! matsuji2024/09/18コメントありがとうございます。 考えられるケースとしてはいくつかありますが、一番現実的なケースだと呼び出し箇所が多すぎる場合です。 actorにすると、呼び出し箇所でSwift Concurrencyを使うことが強制されます。 新規プロジェクトなら問題にならないかもしれませんが、すでにリリースされている大規模なアプリだと、まだまだSwift Concurrencyが使えないコードも多いと思います。そういう場合actorにできないと思います。(技術的には可能ですが、現実的には不可能な場合という意味です。) uhooi2024/09/19なるほど、それなら納得です…! ありがとうございます🙏✨ 返信を追加
matsuji2024/09/18コメントありがとうございます。 考えられるケースとしてはいくつかありますが、一番現実的なケースだと呼び出し箇所が多すぎる場合です。 actorにすると、呼び出し箇所でSwift Concurrencyを使うことが強制されます。 新規プロジェクトなら問題にならないかもしれませんが、すでにリリースされている大規模なアプリだと、まだまだSwift Concurrencyが使えないコードも多いと思います。そういう場合actorにできないと思います。(技術的には可能ですが、現実的には不可能な場合という意味です。)
Discussion
deinitの例は、nonSendableObserverがFooインスタンスの内部からのみの利用で安全であれば(MainActorisolatedなメソッドとdeinitからのみのアクセスであれば、メソッド同士は排他的だしdeinitが呼ばれるときにインスタンスメソッドが呼ばれていることはないので、同時にアクセスされることはないので)、nonisolated(unsafe)にするのはどうでしょう?コメントありがとうございます!
actorの中でnonisolatedを書くことも多くはないでしょうし、シンプルで良い方法に思いました。そのアイデアを追加させていただきました。ありがとうございました!
nonisolated(unsafe)を付け足す
素晴らしい記事をありがとうございます…!
こちらの記述が気になったのですが、
actorにできない場合はあるのでしょうか?「したくない」場合はあると思うのですが、「できない」場合があるのかわからなかったので気になりました…!
コメントありがとうございます。
考えられるケースとしてはいくつかありますが、一番現実的なケースだと呼び出し箇所が多すぎる場合です。
actorにすると、呼び出し箇所でSwift Concurrencyを使うことが強制されます。
新規プロジェクトなら問題にならないかもしれませんが、すでにリリースされている大規模なアプリだと、まだまだSwift Concurrencyが使えないコードも多いと思います。そういう場合actorにできないと思います。(技術的には可能ですが、現実的には不可能な場合という意味です。)
なるほど、それなら納得です…!
ありがとうございます🙏✨