Avatar
Avatar
trickart
必要がないと書かれているインターネットの情報は多いと思いますが実際は observer (この場合、ViewController) の deinit() で unregister するほうが良いです。
これ、Swift Concurrencyの世界だとdeinitでは @MainActor なクラスであるUIViewController自体(self)を触れないので今後できなくなる気がします。 SE-0371が入ればdeinitでMainActorなクラスを触れるようになるっぽい? https://github.com/apple/swift-evolution/blob/main/proposals/0371-isolated-synchronous-deinit.md 今のところはViewに関係ないNotificationはViewControllerではないクラスで受け取るのがいいのかも (MainActorでなければdeinitでselfに触れるので)
なるほどー。まあ、Notification Center トリビアでiOSアプリなら殆どの場合長時間動作するまえにプロセスが死ぬと思うのでまあ大規模なアプリで長時間使われるものでなければ大丈夫かな。でもmacCatalyst化してmacOSで動かすとかなるとだいぶ問題になる。あとは、blockベースのAPIに変えるとかかなあ。確か挙動が違うはず。 (edited)