AutoLayout原理

手動布局為什么比自動布局效率要高?

實際上這個問題主要是針對iOS12之前,使用AutoLayout,視圖嵌套的數(shù)量對性能的影響是呈指數(shù)增長的。因為在iOS12之后,AutoLayout的性能跟手動布局已經(jīng)相差很小了。

AutoLayout原理

AutoLayout用到了布局算法Cassowar算法和一整套布局引擎Layout Engine
每個視圖在得到它的布局之前,Layout Engine會將視圖、約束、優(yōu)先級、固定大小通過計算轉換成最終的位置和大小。
具體工作流程:

  • 當約束變化,添加、刪除視圖、設置constant和priority會觸發(fā)約束變化
  • Layout Engine碰到約束變化時會重新計算布局
  • 獲取到新約束后,調用superview.setNeedLayout()
  • 然后會進入Deferred Layout Pass,主要是做一些容錯處理。比如說有約束缺失或者沒有確定,會在這里做容錯處理
  • 接下來,Layout Engine 會從上到下調用 layoutSubviews() ,通過 Cassowary 算法計算各個子視圖的位置,算出來后將子視圖的 frame 從 Layout Engine 里拷貝出來
  • 最后,當runloop到來的時候,去重新繪制操作(這一步跟手動布局一樣)

因此使用 Auto Layout 和手寫布局 的區(qū)別,就是多了布局上的這個計算過程

性能問題

在iOS12之后,它是這樣的:


iOS優(yōu)化后

而在此之前的 Auto Layout,視圖嵌套的數(shù)量對性能的影響是呈指數(shù)級增長的。
這是因為iOS 12 之前,很多約束變化時都會重新創(chuàng)建一個計算引擎 NSISEnginer 將約束關 系重新加進來,然后重新計算。結果就是,涉及到的約束關系變多時,新的計算引擎需要重新計 算,最終導致計算量呈指數(shù)級增加。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • Autolayout 介紹 自動布局區(qū)別于手動布局frame的一種布局技術,主要是為元素添加一些關于位置的相對約束...
    草莓味辣妹閱讀 660評論 0 0
  • 視圖更新和渲染循環(huán)(render loop)有關,工作流程如下圖: 主要分三步: 更新約束,從下往上,最終到達Wi...
    樓上那只貓閱讀 687評論 0 0
  • 1.1 AutoLayout原理 iOS 中視圖所需要的布局信息只有兩個,分別是 origin/center 和 ...
    Claire_wu閱讀 19,481評論 3 27
  • 翻譯自“Auto Layout Guide”。 1 入門 1.1 理解自動布局 自動布局根據(jù)視圖層級結構中視圖上的...
    lakerszhy閱讀 3,931評論 3 26
  • 1. AutoLayout的核心 蘋果公司推出的AutoLayout,是一個基于約束,動態(tài)計算視圖大小和位置的庫,...
    冰風v落葉閱讀 2,090評論 0 3

友情鏈接更多精彩內容