假设我想删除一个约束,传统上我会这样做:
view.removeConstraint(constraint)
但是,现在有用于安装/卸载约束的新 isActive 方法。
如果我执行以下操作:
constraint.isActive = false
它会正确地将其从内存中删除吗?
最佳答案
是的,
constraint.isActive = false
正在做同样的事情:
viewThatOwnsConstraint.removeConstraint(constraint)
因此,如果唯一保持约束的是 View ,那么这将正确地将其从内存中删除。
证明如下:
let view = UIView()
weak var weakView: UIView? = nil
autoreleasepool {
weakView = UIView()
}
assert(weakView == nil)
// Traditional way of removing constraints ensures that the constraint is deallocated
weak var weakConstraint: NSLayoutConstraint? = nil
autoreleasepool {
weakConstraint = view.widthAnchor.constraint(equalToConstant: 10)
}
assert(weakConstraint == nil) // nothing is holding on to the constraint
autoreleasepool {
weakConstraint = view.widthAnchor.constraint(equalToConstant: 10)
view.addConstraint(weakConstraint!)
}
assert(weakConstraint != nil)
autoreleasepool {
view.removeConstraint(weakConstraint!)
}
assert(weakConstraint == nil)
// New way of removing constraints:
assert(weakConstraint == nil)
autoreleasepool {
weakConstraint = view.widthAnchor.constraint(equalToConstant: 10)
weakConstraint!.isActive = true
}
assert(weakConstraint != nil)
autoreleasepool {
weakConstraint!.isActive = false
}
assert(weakConstraint == nil)
关于swift - 设置 `constraint.isActive = false` 是否解除约束?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46207216/