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