2016-11-12 34 views
0

我有一個擴展方法通過使用CAShapeLayer到一個動畫邊框添加到圖像視圖,這是我實現:Swift函數變量需要弱引用嗎?

extension UIImageView { 

    func addAnimatedBorder() { 
     let border = CAShapeLayer() 
     //...setup animation 
     border.position = self.center 
     self.layer.addSublayer(border) 
    } 
} 

由於CAShapeLayer被引用的UIImageView(通過其位置),並且的UIImageView具有CAShapeLayer如一層,我擔心會有一個保留週期。

我需要聲明「邊界」 - CAShapeLayer - 弱嗎?或者一旦函數執行後它會超出範圍,只留下UIImageView中對象的唯一引用?

+0

@Hamish是的,複製粘貼錯誤:)謝謝。 – mcfroob

回答

1

還是會說出去的範圍,一旦功能執行

正是這樣。這是一個本地變量,這意味着它具有自動內存管理 - 一個奇特的術語,僅僅意味着當我們退出示波器時它將不存在。在這種情況下,退出範圍意味着到達函數執行的末尾。該參考文件在瞬間瞬間誕生並且不再存在,對更大的物體世界和記憶管理沒有任何影響。

該函數執行後,仍然保留該圖層的唯一對象將成爲它的超級圖層(self.layer.addSublayer) - 並且如果您沒有將該圖層指定給其他圖層作爲其子圖層,它將消失在一縷煙霧中(a真的很微小的煙霧),因爲沒有人會一直保留它。

一般來說,你是這種方式超過這個。您唯一需要擔心Swift中內存管理的時間是以某種方式參考持久性。典型的(但不是唯一的)例子是一個實例屬性。

相關問題