面試UI相關

UI相關

1. UI視圖數據源同步

併發訪問,數據同步 (內存消耗 )

併發訪問,數據拷貝

串行訪問(子線程耗時,會有延時)

串行訪問

2. 事件傳遞和視圖響應的機制和流程

UIView和CALayer

QQ20190509-000336@2x

UIView的backgroundcolor是對CALayer裏backgroundcolor的包裝,contents負責顯示內容,backing store是一個bitmap的位圖bash

  • UIView爲CALayer提供顯示的內容,以及負責處理觸摸等事件,參與響應鏈
  • CALayer負責顯示內容contents

相關設計原則:單一職責原則併發

時間傳遞與視圖響應鏈
// 返回最終響應的視圖
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event

複製代碼
  • hitTest內部實現邏輯
    QQ20190509-002135@2x
// 判斷某一個點擊的位置是否在當前視圖範圍內
- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event
複製代碼
  • 事件傳遞流程 異步

    QQ20190509-001929@2x

  • 事件響應流程 ide

    QQ20190509-002604@2x

3. 圖像顯示原理

QQ20190509-002945@2x

  • CPU工做
    QQ20190509-003130@2x
  1. UI佈局,文本計算
  2. 繪製 drawrect
  3. 圖片編解碼
  4. 提交位圖
  • GPU渲染管線
    QQ20190509-003408@2x
UI卡頓、掉幀的緣由

QQ20190509-003554@2x

  • 滑動優化方案oop

    • CPU佈局

      1. 對象的建立、調整、銷燬放到子線程
      2. 預排版(佈局計算、文本計算)放到子線程
      3. 預渲染(文本等異步繪製、圖片編解碼)放到子線程
    • GPU 4. 紋理渲染(避免離屏渲染) 5. 試圖混合優化

  • UIView繪製原理spa

    QQ20190509-004338@2x

    runloop將要結束時調用CALayer的display方法線程

  • 系統繪製流程設計

QQ20190509-004655@2x

  • 實現異步繪製 *
-[layer.delegate displayLayer:]
複製代碼
1. 代理負責生成對應的bitmap
    2. 設置該bitmap做爲layer.contents屬性的值
複製代碼

QQ20190509-005146@2x

離屏渲染
  • On-n-Screen Rendering 意爲當前屏幕渲染,指的是GPU的渲染操做是在當前用於顯示的屏幕緩衝區中進行

  • Off-n-Screen Rendering 意爲離屏渲染,指的是GPU的渲染操做是在當前緩衝區之外新開闢一個緩衝區進行渲染操做

  • 觸發場景

    1. 圓角(當和maskToBounds同時使用時)
    2. 圖層蒙版
    3. 陰影
    4. 光柵化
相關文章
相關標籤/搜索