《新浪微博剖析 iOS 高級面試》筆記(一):UI視圖相關面試問題

做爲開發者,有一個學習的氛圍跟一個交流圈子特別重要,這是一個 個人iOS交流羣:761407670,無論你是小白仍是大牛歡迎入駐 ,分享BAT,阿里面試題、面試經驗,討論技術, 你們一塊兒交流學習成長!

UITableView相關

1、重用機制
一、iOS如何實現cell的重用機制?

  • A1-A7使用相同的identifer,當tableView向上滑動,A1劃出頁面後,就被放入了重用池。
  • A7即將展現時,首先會在重用池中查看時候有相同identifercell能夠被重用,若是有則直接取出使用,若無則建立一個新的cell

面試筆記

小編這裏有準備一些面試進階資料, 最新面試大廠常問面試答案一份。但願真心可以幫助到你們提高技術!

二、如何手動實現重用機制?

  • ViewReusePool類的聲明

  • ViewReusePool類的實現

  • dequeueReusableView函數實現

  • addUsingView:函數實現

  • reset函數實現

  • ViewReusePool類的使用

2、數據源同步問題

  • 當數據源在主線程中有刪除操做,同時在子線程上又有加載更多數據的操做時,就會出現數據源同步問題

一、數據源同步解決方案

a、併發訪問、數據拷貝
  • 子線程返回主線程的數據中,仍然包含刪除的這一條數據。

  • 主線程進行刪除操做時,將操做記錄下來。以後在子線程同步數據時,同步刪除操做。

b、串行訪問
  • 子線程的數據同步和主線程的刪除操做所有放入一個串行隊列中執行。
  • 刪除動做可能會有延時。

事件傳遞&視圖相應

1、UIView和CALayer

一、UIView和CALayer的關係和區別?

a、關係

  • UIView對象中的layer指向一個CALayer變量
  • UIView對象中的backgroundColor屬性,是對CALayer同名屬性的封裝。
  • UIView展現部分是由CALayer中的contents來決定。contents對應的backing store實際上是一個bitmap的位圖。
b、區別
  • UIView爲其提供內容,以及負責處理觸摸等事件,參與響應鏈。
  • CALayer負責顯示內容contents

二、爲何UIView負責觸摸事件,CALayer負責顯示?

  • 設計模式,單一職責原則。

2、事件傳遞與視圖響應鏈

一、當點擊View C2區域,系統是如何找到響應視圖的呢?

a、事件傳遞的流程

image面試

  • 當用戶點擊屏幕,事件會被UIApplication接受,並傳遞給UIWindow
  • UIWindow調用hitTest函數,在hitTest內調用pointInside判斷事件是否在該視圖內。
  • 若爲false,則返回該視圖,事件傳遞流程結束。
  • 若爲true,則可倒敘遍歷該視圖的子視圖,並調用子視圖hitTest函數。
  • 找到最終hitTesttrue子視圖,並依次返回,事件傳遞流程結束。
b、hitTest系統內部實現

  • 在當前視圖子視圖調用hitTest函數前,須要將當前座標轉換爲子視圖中的座標。

二、如何只讓方形圖片的圓形區域接受事件響應?

  • 重寫視圖的pointInside函數,使得點擊區域在圓形範圍內返回true,不然返回false

感謝各位觀看!文章系列持續更新 點贊再看,感謝觀看,更多請關注!
相關文章
相關標籤/搜索