繁体   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