【发布时间】:2017-03-22 16:42:23
【问题描述】:
我对保留周期很感兴趣。 假设我们有两个视图,A 和他的子视图 B。
我知道如果 B 有一个(自定义)委托定义为
class B: UIView {
var delegate : CustomDelegate?
}
我设置在 A 里面:
b.delegate = self
这个创建retain循环,因为B对A有强引用,A对be有强引用,所以两者都不能被释放。
问题:
如果我在 A 中有对象,我想将它传递给 B 对象。
class B: UIView {
var object : SomeObject?
}
在 A 内部:
b.object = self.object
这也是保留周期吗?我想不通。
创建对象(在 A 中)时,它的引用是 1。当它传递给 B 时,它的引用是 2。但是当 A 尝试释放自身时:当 A 中释放对象时,它会减少对 1 的引用,当他尝试解除分配 B 对象引用应为 0。这是否意味着没有保留周期?还是 B 间接引用了 A 槽对象?
第二个问题:
如果 B 中的所有对象都是弱引用,我会失去什么?或者更好的女巫对象需要弱?
【问题讨论】:
-
你的代码没有意义。 UIView A 怎么会说
self.object?它没有object属性。什么是 SomeObject? -
“如果 B 中的所有对象都是弱引用,我会失去什么?或者更好的女巫对象需要弱引用?”太宽或太圆。
-
马特,A里面的代码只是一个说明,当然A应该有变量对象,A应该添加B作为子视图,...但我认为这是案例应用。对于 B 中的所有对象,我想到了将在 A 中设置的对象,但你含蓄地回答了我。
-
一般来说,您可能想阅读我对内存管理是的解释,从这里开始:apeth.com/iOSBook/…
-
谢谢你。
标签: ios swift memory-management reference-counting retain-cycle