美文网首页Fuck iOS EveryDay
autolayout与frame的性能比较

autolayout与frame的性能比较

作者: f48ac133a97f | 来源:发表于2020-03-26 11:45 被阅读0次

autolayout是相对布局,frame是绝对布局,相对于性能frame更好一点,但是review太复杂,编程效率低。相对于来说Masonry或者SnapKit(swift)可读性强,效率高,是个不错的选择。

1.关于AutoLayout

AutoLayout 不只有布局算法 Cassoway,还包含了布局在运行时的生命周期等一整套布局引擎系统,用于统一管理布局的创建、更新和销毁。这一整套布局引擎叫做 Layout Engine,是  AutoLayout 的核心,主导者整个界面布局。

每个视图在得到自己的布局之前,Layout Engine 会将视图、约束、优先级、固定大小通过计算转换成最终的大小和位置,在 Layout Engine 里,每当约束发生变化,就会触发 Deffered Layout Pass, 完成后进入监听约束变化的状态。当再次监听到约束变化,即进入下一轮循环中。

设置约束的 Constant 和 Priority 时也会触发约束变化。Layout Engine 在碰到约束变化后会重新计算布局,获取到布局后调用 superView.setNeedLayout() 然后进入 Deffered Layout Pass, Deffered Layout Pass 的作用主要是容错处理,如果有些视图在更新约束时没有确定或缺失布局声明会在此做容错处理。接下来,Layout Engine 会从上到下调用 layoutSubViews() , 通过 Cassoway 算法计算各个子视图的位置,算出来将子视图的 frame 从 Layout Engine 拷贝出来。

Auto Layout 在 iOS 12 中优化后的性能,已经基本和手写布局一样可以达到性能随着视图嵌套的数量呈线性增长 了。而在此之前的 Auto Layout,视图嵌套的数量对性能的影响是呈指数级增长的。 为什么 iOS 12 以前性能不好呢? 原因是:iOS 12以前,当有约束变化时都会重新创建一个计算引擎 NSISEngier 将约束关系重新加起来,重新计算。涉及到约束关系变多时,新的计算引擎需要重新计算,最终导致计算量指数级增加! Cassoway 算法本身没有问题,问题是iOS 12之前在某些情况下没有用好这个算法。 iOS 12 以后的 AutoLayout 更多的利用了 Cassoway 算法的界面更新策略,使其真正完成了高效的界面线性策略计算,使其和手写布局有了几乎相同的高性能! 

相关文章

  • autolayout与frame的性能比较

    autolayout是相对布局,frame是绝对布局,相对于性能frame更好一点,但是review太复杂,编程效...

  • iOS常见问题

    Autolayout和Frame Autolayout的约束最后都是系统最终转化成frame来进行布局的,对与一个...

  • AutoLayout

    在Autolayout情况下使用Frame 1、在AutoLayout生效之前使用Frame,设置的Frame是无...

  • AutoLayout的那些事(二)

    Mango's Blog 接上篇,本篇主要内容为: AutoLayout与Frame篇 AutoLayout动画篇...

  • layoutSubView那些事

    layoutSubview qustions 设置frame结果(与设置autoLayout结果一样)红色视图是蓝...

  • frame autoresizingMask autolayou

    控件的位置和大小有三种确定方式:frame autoresizingMask autolayout frame设置...

  • Autolayout和Frame

    现在iOS页面布局用的最多的就是Frame和Autolayout,在Autolayout通过Masonry封装在实...

  • xib自定义View 改变Frame不生效 解决方案

    当在 xib 中使用 Autolayout 后设置 Frame 就不会生效因为和 Autolayout 冲突参考这...

  • UIView 的 drawRect方法的使用

    总结来说,当使用frame布局直接设置frame时,drawRect不会触发,但是当使用autoLayout时候,...

  • iOS AutoLayout

    iOS AutoLayout Autolayout是一种全新的布局技术,专门用来布局UI界面的,用来取代Frame...

网友评论

    本文标题:autolayout与frame的性能比较

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