@MainActor
で保護されているとき、 そのメソッドは、MainActorからの呼び出し→そのまま 他のActorからの呼び出し→async化 というのが型としての挙動で それを継承したサブクラスが @MainActor
では無かったとした場合 継承してオーバーライドしたメソッドは、 サブクラスのメソッドとしてみれば、保護が外れているので、 どこから呼び出してもそのままの挙動 つまり、マルチスレッドセーフなメソッドとして実装されているという仮定が置ける。 このマルチスレッドセーフなオーバーライド実装を、 スーパークラスのメソッドとしてアップキャストして見てみると、 @MainActor
として保護されている事になるけど、 MainActorからの呼び出し→マルチスレッドセーフな実装にオーバライドされているので問題ない 他のActorからの呼び出し→実装に対しては無意味にasync化するけど、本体はやはりマルチスレッドセーフなので問題ない (edited)