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