簡體   English   中英

Swift函數變量需要弱引用嗎?

[英]Do Swift functions variables require weak references?

我有一個擴展方法可以向圖像視圖添加動畫邊框,這是通過使用CAShapeLayer實現的:

extension UIImageView {

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

由於CAShapeLayer(通過其位置)引用UIImageView,並且UIImageView將CAShapeLayer作為圖層,因此我擔心會存在保留周期。

我是否需要宣布“邊界”(CAShapeLayer)為弱? 還是在函數執行后就超出范圍,而對對象的唯一引用就是UIImageView中的引用?

否則函數執行后會超出范圍

正是如此。 這是一個局部變量 ,意味着它具有自動內存管理功能–一個花哨的術語,僅僅意味着它在我們退出范圍時將不復存在。 在這種情況下,退出范圍意味着到達函數執行的結尾。 轉瞬之間,引用就存在了,而不再存在,對更大范圍的對象和內存管理沒有任何影響。

函數執行后,唯一保留該層的對象將是其上層( self.layer.addSublayer )—如果您尚未將該層分配給另一層作為其子層,則該層將消失在煙霧中(a真的很小的煙霧),因為沒有人會保留它。

總的來說,您對此太想了。 您唯一需要擔心Swift中的內存管理的時候就是引用以某種方式持久化的時候。 典型的(但不是唯一的)示例是實例屬性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM