美文网首页
AutoLayout原理

AutoLayout原理

作者: CharmecarWang | 来源:发表于2020-03-28 22:12 被阅读0次

手动布局为什么比自动布局效率要高?

实际上这个问题主要是针对iOS12之前,使用AutoLayout,视图嵌套的数量对性能的影响是呈指数增长的。因为在iOS12之后,AutoLayout的性能跟手动布局已经相差很小了。

AutoLayout原理

AutoLayout用到了布局算法Cassowar算法和一整套布局引擎Layout Engine
每个视图在得到它的布局之前,Layout Engine会将视图、约束、优先级、固定大小通过计算转换成最终的位置和大小。
具体工作流程:

  • 当约束变化,添加、删除视图、设置constant和priority会触发约束变化
  • Layout Engine碰到约束变化时会重新计算布局
  • 获取到新约束后,调用superview.setNeedLayout()
  • 然后会进入Deferred Layout Pass,主要是做一些容错处理。比如说有约束缺失或者没有确定,会在这里做容错处理
  • 接下来,Layout Engine 会从上到下调用 layoutSubviews() ,通过 Cassowary 算法计算各个子视图的位置,算出来后将子视图的 frame 从 Layout Engine 里拷贝出来
  • 最后,当runloop到来的时候,去重新绘制操作(这一步跟手动布局一样)

因此使用 Auto Layout 和手写布局 的区别,就是多了布局上的这个计算过程

性能问题

在iOS12之后,它是这样的:


iOS优化后

而在此之前的 Auto Layout,视图嵌套的数量对性能的影响是呈指数级增长的。
这是因为iOS 12 之前,很多约束变化时都会重新创建一个计算引擎 NSISEnginer 将约束关 系重新加进来,然后重新计算。结果就是,涉及到的约束关系变多时,新的计算引擎需要重新计 算,最终导致计算量呈指数级增加。

相关文章

  • (WWDC) 高性能AutoLayout (High Perfo

    内容概览: • AutoLayout在iOS 12的性能提升• AutoLayout内部原理和直觉• 构建高效的布...

  • AutoLayout原理

    视图更新和渲染循环(render loop)有关,工作流程如下图: 主要分三步: 更新约束,从下往上,最终到达Wi...

  • AutoLayout原理

    手动布局为什么比自动布局效率要高? 实际上这个问题主要是针对iOS12之前,使用AutoLayout,视图嵌套的数...

  • Masonry

    基本原理 基于iOS系统的Autolayout,是对系统autolayout的封装。 根据item1.attrib...

  • AutoLayout 的原理

    https://www.jianshu.com/p/c6541ff0bdaf

  • AutoLayout布局原理

    1997年, Auto Layout用到的布局算法Cassowary被发明了出来2011年, 苹果公司将Casso...

  • 使用autolayout自动算cell的高度

    原理 使用autolayout布局cell的sub view,同时,利用UIView的systemLayoutSi...

  • iOS自动布局AutoLayout

    1.1 AutoLayout原理 iOS 中视图所需要的布局信息只有两个,分别是 origin/center 和 ...

  • 从Masonry原理解析使用注意点

    Masonry的原理解析以及使用 Masonry应该是目前使用最为广泛的对于AutoLayout的封装(Swift...

  • Autolayout原理及Masonry实现

    Autolayout 介绍 自动布局区别于手动布局frame的一种布局技术,主要是为元素添加一些关于位置的相对约束...

网友评论

      本文标题:AutoLayout原理

      本文链接:https://www.haomeiwen.com/subject/zzreuhtx.html