swift - 设置 `constraint.isActive = false` 是否解除约束?

标签 swift uiview nslayoutconstraint

假设我想删除一个约束,传统上我会这样做:

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/

相关文章:

string - 如何制作比较字符串的函数?

ios - 不能再在 CorePlot 中子类化 CPTGraphHostingView (v2.3) 吗?

ios - 将两个可变宽度 View 保持在 super View 中心的约束

ios - 如何将自定义单元格与右细节和基本单元格对齐?

ios - UIDatePicker 值与显示的日期不匹配

ios - 如何快速删除不需要的 searchbar.text 字符?

按属性快速排序对象

ios - 如何多次调用 viewDidLoad

ios - UITableView 滚动时改变 UIView 的高度

ios - 如果我想在之后为自动布局约束设置动画,我该如何修改我的 UIView 扩展?