2016-02-03 87 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引用該對象。