High Performance Auto Layout

0x0 iOS12改进

0x1 约束流失

0x2 Render Loop

image.png
  • updateConstraint从底层视图到UIWindow
  • layoutSubViews从UIWindow到底层视图


    image.png
  • 要点不要在updateConstraints和layoutSubViews 频繁 deactivate约束/remove视图 这两个方法没秒会运行至多120次

0x3

  • Engine是用来计算多元一次不等式的

0x4

  • 减少不必要的多视图联动约束

0x5

  • 保持约束条件尽可能的少

0x6

  • 优先使用setHidden隐藏可选视图

0x7

  • 使用Instruments layout time 审查视图性能 constraint churning代表约束流失。尽量让建立约束的代码只执行一次

0x8

  • 对于使用setHidden无法满足需求的动态视图,使用分组约束分离处不同动态视图下相同的约束部分和不同的约束部分。保证相同的约束只建立一次减少约束流失,不同的约束分成多组,在不同的布局中选择其中的一种activate,deactivate其他组的约束

0x9 Intrinsic Content Size

  • UIImageView 返回 image size
  • UILabel 返回 text size
  • UILabel提升性能,已知size的情况下直接覆盖intrinsicContentSize并返回size,否则返回CGSize(width: UIView.noIntrinsicMetric, height: UIView.noIntrinsicMetric)
override var intrinsicContentSize: CGSize {
    return CGSize(width: UIView.noIntrinsicMetric, height: UIView.noIntrinsicMetric)
}

0x10 systemLayoutSizeFitting

  • 不要过度使用systemLayoutSizeFitting(_ targetSize:) 这个api会重复创建/销毁engine

你可能感兴趣的:(High Performance Auto Layout)