2016-10-30 12 views
1

私はこのリンクでGCDについてアップルの最後の会議以下午前:https://developer.apple.com/videos/play/wwdc2016-720/?time=33 私はそれがここでの前提条件のことを話すのポイントになった:https://developer.apple.com/videos/play/wwdc2016-720/?time=1267、このポイントに到着スウィフト3. の新機能を:https://developer.apple.com/videos/play/wwdc2016-720/?time=1474がこれに使用されます: .register(オブザーバー:、キュー:) enter image description here 私の質問:どのようにこの機能を保持するオブジェクトBusyControllerhttps://developer.apple.com/videos/play/wwdc2016/720/?time=1550前提条件スウィフト3

答えて

0

register(observer:queue:)BusyControllerを保持していますか?

まず、元に戻ってみましょう:彼の例の詳細を見失わないようにしましょう。彼はそれがは、になることができるという強い参照を確立することを言っていないので、deinitでクリーンアップしようとするだけで慎重にする必要があります。

したがって、DataTransformBusyControllerを保持しますか?それは単にそのobserverへの強い参照を維持することができます。彼が「言うようになると、「... DataTransformオブジェクトはBusyControllerに強い参照を確立することを想像し、」彼らはただ言っている

をしかし:標準観測方法でこのカスタムregister方法の一例をconflateないでくださいあなたは熟練した開発者であり、この問題を解決する方法を知っているので、weakのリファレンスを使用してください。だから一般的に、私たちは彼らの観察者に強い参照を維持する観察方法を書いていないでしょう。

しかし、彼が言うように、強い参照サイクルを回避することがうまくいく場合でも、オブジェクトグラフはかなり複雑になる可能性があるので、deinitに頼ってクリーンアップすることは必ずしも良い考えではありません。彼は明示的なinvalidateプロセスを提唱しており、場合によってはdeinitが呼ばれるまでにオブジェクトが無効になったことをテストするために前提条件を使用しています。

関連する問題