UITableView作为在项目中最常用控件之一,对于开发人员而言特别重要,基本上哪个App都用到了tableView,于是,理解tableView的重用机制对于iOS开发人员来说很重要,
首先tableView为什么需要重用机制呢?我们来举个例子,假如一个tableView需要加载N行cell,那就需要创建N个cell来进行显示,可是作为用户我们只能看到手机屏幕中那仅有的几个cell,滑动的时候才能看到更多的cell,于是我们如果创建N个cell的话,就会造成内存的损失。为了优化这种内存损失,重用机制应运而生,即我们不需要创建N个cell,不要一次性加载那么多的cell,而只加载屏幕上所显示的cell,当监听到用户滑动的时候,离开屏幕的cell可以存储起来,便于下次赋值显示,而不是直接销毁再重新创建.
重用机制实现了数据和显示的分离,并不为每个数据创建一个UITableViewCell,我们只创建屏幕可显示的最大的cell个数+1,然后去循环重复利用这些cell,既节省空间,又达到我们需要显示的效果.
这种机制下系统默认有一个可变数组NSMutableArray* visiableCells,用来保存当前显示的cell.一个可变字典NSMutableDictnery* reusableTableCells,用来保存可重复利用的cell.(之所以用字典是因为可重用的cell有不止一种样式,我们需要根据它的reuseIdentifier,也就是所谓的重用标示符来查找是否有可重用的该样式的cell),用以一一对应.
如代码所示:
重用机制首先,从重用队列中reusableTableCells字典中取出cell(这一步是根据reuseIdentify标识作为键去字典中取出这个类型的cell),假如没取到,说明重用字典(队列)中没有reuseIdetify这种类型的cell,那么就创建一个这种类型的cell,当监听cell在屏幕中的时候,就讲其放入visibleCells中去,当监听到cell离开屏幕的时候,就将其存入reusableTableCells中去(相当于 [reusableTableCells setValue:cell forKey:reuesIdentifier]),这样可以达到重复创建一种类型的cell,类似于一种缓存机制。
作者:mrChan1234
网友评论