UITableView系列(1)---Apple缓存池机制
一.概述
关于UITableView的基本使用, 其实十分简单.但是做App最重要的之一就是细致,技术方面要做到细致, 必须深入了解底层, 才能做出优化让程序跑得更快.那么这一系列文章从我实际项目中获得的经验和总结, 分享以下UITableView的一些原理和优化.我会先谈谈Apple对UITableView做的缓存池优化.接着再分享下, 我们如何在Apple的基础上还有哪些细致的地方, 方便可以进行基本优化.最后我们分享一下更复杂的优化, 接着介绍一下我写的第三方框架.
二.核心
UITableView的缓存池优化
在移动开发中,我们经常用到UITableView来展示数据, 而UITableView上的数据是由一个个的cell来进行展示的, 如果数据很多, 是不是就有很多的cell呢?想然不是,移动设备设计之初, 内存资源是十分有限的, 如果是有多少条数据, 就有多少个cell, 那么程序肯定会卡爆内存.所以Apple对UITableView做了第一层的优化, 也是十分重要的一层.就是缓存池优化.
其原理就是, 我们不是根据有几条数据就创建几个cell.而是基于这样两个机制 ,即首先创建出当前屏幕够用的cell, 当我们拖动屏幕, 要有新的cell出现的时候, 先去缓存池中去, 如果缓存池有, 就直接用, 后者再创建(取的逻辑).其次, 当cell滚出屏幕的时候, 并不是将cell这块内存释放掉, 而是将其放到缓存池中, 缓存起来(缓存的逻辑).
根据这个原理, 我们可以知道, 一般一个页面的cell总数 = celing(当前页面高度 / cell高度) + 1;
注意:
正是因为缓存机制, 所以我们拿到的cell, 可能是新创建的cell, 可能是缓存池的cell.所以每次拿到一个新的cell都要重新刷新数据.不然可能会造成数据错乱
缓存池的好处:
当cell数量很多时候节约了大量的内存资源. 节约了创建cell所需时间的开销.(所以缓存池即优化了内存开销, 也优化了时间开销).