私は、プロトコルとデリゲートメソッドを使用して、dismissViewControllが呼び出された後に前のVCにデータを戻しています。以下は、それはほとんどのチュートリアルは弱いデリゲートとクラスプロトコル
protocol someVCDelegate {
func somefunction()
}
var delegate: someVCDelegate!
を書かれたその方法ではないと私は通常、それを行うだろうかしかし、私はそれを書いて、このクラスの/弱いアプローチに出くわしています。
protocol someVCDelegate : class {
func somefunction()
}
weak var delegate: someVCDelegate!
弱いのはARCに関連しており、保持サイクルを回避していることを理解しています。しかし、私がすべての私の場合と同じようにいつ必要なのか分かりません。弱い委任作品を探すことはしません。どのような状況で弱い代表者が必要でしょうか?また、なぜそれが "!"弱いの後、通常それは "?"弱い権利の後に?
いつでもデリゲートをnilにしますか?または前のVCは次のVCへの参照を保持していませんか?オブジェクトが少なくとも1つの強い参照を持っている場合は、ARCはそれをクリーンアップしません。したがって、以前のVCに次のVCへの参照があり、次のVCに前のものへの(強力な)委任参照がある場合、ARCはメモリリークを引き起こす他のすべての参照を失うと削除しません。 – Fonix
代理人とにかく弱いですが、それは難しくなく、将来あなたの頭痛を救うことができます。後で問題になる場合はデバッグするのが難しいかもしれない – Fonix
ただこれを今日読んでください。それは私のためのいくつかの緩やかな終わりを明らかにした:ARC。 https://www.raywenderlich.com/134411/arc-memory-management-swift – Adrian