Swift函数变量需要弱引用吗?

时间:2016-11-12 00:51:40

标签: ios swift weak-references

我有一个扩展方法可以为图像视图添加动画边框,这是我使用CAShapeLayer实现的:

extension UIImageView {

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

由于CAShapeLayer引用了UIImageView(通过它的位置),而UIImageView将CAShapeLayer作为一个层,我担心会有一个保留周期。

我是否需要声明" border" - CAShapeLayer - 弱吗?或者,一旦函数执行,它是否会超出范围,只留下对象的引用是来自UIImageView的对象?

1 个答案:

答案 0 :(得分:1)

  

一旦函数执行

,它是否会超出范围

确实如此。这是一个局部变量,这意味着它具有自动内存管理 - 一个奇特的术语,只是意味着当我们退出作用域时它将不再存在。在这种情况下,退出范围意味着到达功能执行的结束。该参考文献已经存在,并且在一瞬间就不再存在,对更大的物体和内存管理世界没有任何影响。

在函数执行之后,仍然保留图层的唯一对象将是它的超级图层({{1}}) - 如果你没有将图层指定给另一个图层作为其子图层,它就会消失吸烟(真是一小撮烟雾),因为没有人会保留它。

总的来说,你是在思考这个问题。你唯一需要担心Swift内存管理的时候是某个引用是 persistent 的某种方式。典型(但不是唯一)示例是实例属性。