これは、多少の意見に基づいているので、私は私の意見を与えるでしょう:)
私は、一般的に同期をベースにします。クロージャがAsyncの場合、closeが呼び出されたときに呼び出しインスタンスが存在しなくなるため、[weak self]
を使用する必要があります。クロージャが同期している場合、それは不要であり、強力な参照をキャプチャしても問題ありません。
には、インスタンスを有効にしておくと(例えば、あなたのViewアニメーションの場合など)、クロージャーとあなたの使用法が合理的に期待できるクロージャーも含まれていますそれは未来のある時点で理論的に破綻する可能性があります。安全性が低く、将来のメンテナンスがより困難/危険になります。
UIView.animateのような確立された予測可能なAPIの場合、私は個人的には簡潔にするために強い自己を使用する傾向がありますが、これは自分自身で行う必要があり、使い方によって異なります。
また、コメントに記載されているように、これは関数クロージャにも当てはまります。クロージャーを別の変数のプロパティに代入するのには、異なる一連の問題があります。
私は、弱参照クロージャのアプローチを採用しています。これは、単に、タイプ内で別のメソッドを呼び出すことです。
thing.doSomethingWithAClosure() { [weak self]
self?.doSomething()
}
ロジックを単純化し、より機能的な/モジュラーコードも実行します。
**? –
[Strong Reference Cycles for Closures](https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/AutomaticReferenceCounting.html#//apple_ref/doc/uid/TP40014097)をご覧ください。 -CH20-ID56)Swiftプログラミング言語ガイドの一部です。 –