Avatar
一昨日の話だと、 @MainActor が付与されたクラスのサブクラスは、オーバーライドしたメソッドは @MainActor に保護されるけど、それ以外のメソッドは保護されないって話じゃなかったですっけ?僕の勘違い? import UIKit class ViewController: UIViewController, Sendable { override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) print("viewDidAppear 1", Thread.isMainThread) Task { print("viewDidAppear 2", Thread.isMainThread) await Actor().callFoo(of: self) } } func foo() { print("foo 1", Thread.isMainThread) Task { print("foo 2", Thread.isMainThread) } } } actor Actor { func callFoo(of viewController: ViewController) async { print("callFoo", Thread.isMainThread) await viewController.foo() } } viewDidAppear 1 true viewDidAppear 2 true callFoo false foo 1 true foo 2 true
4:06 AM
foononisolated 付けたら↓になるので、 fooMainActor に保護されてるっぽい。 foo 1 false foo 2 false