ios緩存池
Ⅰ iOS自己動手實現tableview可重用機制
tableview的實現原理:
1.給view添加重用Id要用的時候就從重用緩存池裡找可以重用的view如果沒有就創建一個添加到緩存池中
2.把屏幕外不可見的view去掉放進可重用池中
本文就是簡單實現這個可重用功能,創建一個單個view為屏幕大小,只雀嘩需要2個view就可以無限滑動的小demo
首先需要寫一個一個dataSourse的協議供外部使用
只是簡單的實現可重用功能,所以不需要動態添加view,數量鎮汪和大小都寫死了,這個set就相當於緩存池,這里用array也可頃旅行以,但是由於查找可重用view是隨機存取不需要順序存儲所以沒必要用array,判斷和決定一個view是否可重用需要一個標志,這里就用view自帶的tag來處理了,當tag為1時代表可重用(當前不顯示在界面上),為0為不可重用(已顯示在界面上)
之後需要在初始化後就添加一個view,這里創建了一個first標簽用來判斷是不是初始化,因為layoutsubviews不只會調用一次,而且我嘗試的時候發現是手指移動距離等於屏幕寬度的時候正好會調用一次(一開始沒注意這個問題被坑了好久)
override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
//獲取每次調用該方法相對上次調用時的手指偏移量
let offset = (touches.first?.previousLocation(in: self).x)! - (touches.first?.location(in: self).x)!
//記錄當前屏幕左邊到原點的距離
contentOffset += offset