下面的代码似乎不适用于我。
class SomeSubView: UIView {
deinit {
removeFromSuperview()
}
}
let view = UIView()
var subview: SomeSubView! = SomeSubView()
var subview2: SomeSubView! = SomeSubView()
view.addSubview(subview)
view.addSubview(subview2)
subview = nil
subview = SomeSubView()
view.addSubview(subview)
print(view.subviews) //contains three views, should contain two我在deinit中也有一个print(),所以我很确定它被调用了。在生成表达式subview.removeFromSuperview()之前,我可以调用subview = nil,这很好。
我只想知道为什么这个限制存在,在deinit中什么东西是不能做的?我觉得我想做的事应该有效.
发布于 2016-02-03 22:04:50
从来没有必要在removeFromSuperview()中的self上调用deninit。superview保留它的子视图,所以当它是子视图时,不可能将视图释放。
设置subview = nil不会释放subview引用的对象。它只是停止让subview引用该对象。
https://stackoverflow.com/questions/35188495
复制相似问题