【发布时间】:2016-09-16 01:56:04
【问题描述】:
在调用dismissViewControll 后,我一直在使用协议和委托方法将数据传回之前的VC。以下是我通常会这样做,因为大多数教程都不是这样写的
protocol someVCDelegate {
func somefunction()
}
var delegate: someVCDelegate!
但是,我遇到了这个类/编写它的弱方法。
protocol someVCDelegate : class {
func somefunction()
}
weak var delegate: someVCDelegate!
我了解 weak 与 ARC 相关联并避免了保留周期。但是,我不确定什么时候需要它,就像在所有情况下一样,不做弱委托工作(VC 确实 deinit)。在什么样的情况下我需要弱委托?还有,为什么是“!”弱之后,通常是“?”后弱吧?
【问题讨论】:
-
你在任何时候都会让代表为零吗?还是上一个 VC 不保留对下一个 VC 的引用?我怀疑为什么要在任一 VC 上调用 deinit,如果一个对象至少有一个对其的强引用,ARC 不会清理它。因此,如果前一个 VC 具有对下一个 VC 的引用,并且下一个 VC 具有对前一个的(强)委托引用,如果它们丢失所有其他引用导致内存泄漏,ARC 将不会删除它们
-
无论如何让代理变弱总是好的做法,这并不困难,并且可以在将来为您省去一些麻烦。如果以后确实成为问题,可能很难调试
-
今天刚读完。它澄清了一些松散的结局:对我来说是ARC。 raywenderlich.com/134411/arc-memory-management-swift
标签: ios swift delegates protocols swift-protocols