2017-11-29 11 views
0

RxSwiftは強力な機能ですが、時には自分自身を脚で撃ってしまいます。 問題はResource countとオブジェクトの割り当て解除で構成されています。 View ModelでCocoaActionlazy varを使用します。それは、この流れの中で正常に動作します:メモリから削除メモリリークのない怠惰なCocoaAction#2方法

lazy var onCancel: CocoaAction = { [unowned self] _ in 
    return CocoaAction { 
     return self.coordinator.pop() 
    } 
}() 

ControllerView Model - 素敵!

外部を使用しようとすると問題が発生します。self値は(オブジェクトは削除されません。なぜなら、アクションは強力なものだからです。referenceからself)。ここでサイクルを避けるには?

+0

2番目のケースでは、「return CocoaAction {[unowned this] _ in」を試しましたか? –

+0

@OrkhanAlikhanov 'unowned'は、 '<>'ではなく、クラスとクラスにバインドされたプロトコルタイプにのみ適用できます。 –

答えて

0

いずれの場合も、保持サイクルを避けるためにCocoaActionに弱い参照を渡す必要があります。最初のケースは、未所有のselfを最初のクロージャに渡すため、最終的に2番目のクロージャに渡されます。 2番目のケースでは、をthisという名前のパラメータとしてクロージャに渡し、thisを強い参照で2番目のクロージャに渡します。だから、あなたはそれを弱くしなければならない。

TypeOfSelfをあなたが属するクラスの名前に変更するのを忘れないでください。そうでなければ、コンパイラはその型を推論することができません。

+0

TypeOfSelfをクラス名に変更してエラーが発生しました: '値を変換できません'&'をタイプ指定 'CocoaAction'(別名「アクション<(),()>」)に入力してください。& 行の連続文は ';'で区切る必要があります –

+0

私はあなたの保持サイクル理論に同意します。 –

+0

私は今テストすることができません。 –

関連する問題