我有一个扩展方法可以为图像视图添加动画边框,这是我使用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的对象?
答案 0 :(得分:1)
一旦函数执行
,它是否会超出范围
确实如此。这是一个局部变量,这意味着它具有自动内存管理 - 一个奇特的术语,只是意味着当我们退出作用域时它将不再存在。在这种情况下,退出范围意味着到达功能执行的结束。该参考文献已经存在,并且在一瞬间就不再存在,对更大的物体和内存管理世界没有任何影响。
在函数执行之后,仍然保留图层的唯一对象将是它的超级图层({{1}}) - 如果你没有将图层指定给另一个图层作为其子图层,它就会消失吸烟(真是一小撮烟雾),因为没有人会保留它。
总的来说,你是在思考这个问题。你唯一需要担心Swift内存管理的时候是某个引用是 persistent 的某种方式。典型(但不是唯一)示例是实例属性。