系统类是子类化,代理引用自身。
class MyScrollView: UIScrollView {
convenience init() {
delegate = self
}
// Is this necessary?
deinit {
delegate = nil
}
}
解除分配实例时,UIScrollView.delegate
属性是否必须设置为nil?
答案 0 :(得分:1)
只有强引用可以保持和实例存活。弱引用(例如此delegate
成员)不足以导致强引用周期。这需要......强有力的参考。
另一方面,将delegate = nil
放在deinit
中并不是很有意义。即使delegate
成员保持此实例存活,(它不是),那么这个deinit
也不会被调用。
答案 1 :(得分:1)
// Is this necessary?
deinit {
delegate = nil
}
在Swift的nil
中将值设置为deinit
永远不会是必要的(无论如何,您认为它正在做的任何事情都将由ARC自动完成)。还有很多其他原因在这个具体案例中没有必要,但事实上这个deinit
永远不正确。斯威夫特胜过它们。
这与你问题的标题无关;我不确定为什么这是标题。