[英]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.