2016-02-03 47 views
0

以下代码似乎不适用于我。从deinit调用removeFromSuperview()

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 

我也有一个print()的DEINIT里面,所以我敢肯定它被调用。在表达subview = nil之前,我可以拨打subview.removeFromSuperview(),这很好。

我只是好奇为什么这个限制存在,deinit里面不能做什么样的东西?我觉得我想要做的事情应该工作...

回答

4

没有必要致电selfremoveFromSuperview()deninit。超级视图保留其子视图,因此视图在子视图中不可能被释放。

设置subview = nil不取消分配subview引用的对象。它只是停止使subview引用该对象。