Sen*_*ful 4 uiview nslayoutconstraint swift
假设我要删除约束,传统上我会这样做:
view.removeConstraint(constraint)
Run Code Online (Sandbox Code Playgroud)
但是,现在有了用于安装/卸载约束的新的isActive方法。
如果我执行以下操作:
constraint.isActive = false
Run Code Online (Sandbox Code Playgroud)
它会正确地将其从内存中删除吗?
是,
constraint.isActive = false
Run Code Online (Sandbox Code Playgroud)
在做与以下事情相同的事情:
viewThatOwnsConstraint.removeConstraint(constraint)
Run Code Online (Sandbox Code Playgroud)
因此,如果唯一约束该约束的是视图,那么它将正确地将其从内存中删除。
这是证明:
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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1068 次 |
| 最近记录: |