刚开始看到UITableViewCell时,我还以为只是那只是UIScrollView里面创建了多个带边框View。然后就自己用for循环创建多个View在UIScrollView上面,但是发现这时候项目所占得内存很大,后来查了一下才知道,原来这不是ScrollView,而是UITableViewCell。
UITableViewCell为什么能存在那么多个Cell而占用内存却不多呢?这要归功于它的重用机制。
重用机制:重用机制其实就是在我们能最大可视范围内多加了一个内存,这个内存叫重用队列。当我们滑动时,即将出现的cell从重用队列里取,而消失的cell则放入重用队列中。
假设我们屏幕最多能显示10个完整的cell,当我们往上滑动屏幕时,下方会逐渐出现一个cell,而最上面的cell则会逐渐消失。下方出现的cell就是从重用队列里面取出,而逐渐消失的cell则会被放到重用队列中等待下次的使用(往下滑道理一样,自己脑补一下)
很明显使用UITableViewCell比我们自己创建UIScrollView要好很多,特别是在内存上。
在这里我要说一下我前几天在面试的时候遇到的一件事情:当时面试官问我,重用机制有什么好处?我回答的是节省内存的使用之类的。但是他说不对,重用机制是用内存换取性能,原因是当我们滚动TableView的时候,消失的cell可以release掉,而出现的cell可以新创建,不需要创建多一个内存放着,这样相对于重用机制来说少了一个内存,但是需要不停的创建和release,所以性能会比较差。当时听到这个的时候我有点蒙(因为是第一次听到这种说法),我也没想太多,一个劲的说是的是的。然后回来的路上我一直在想这个问题,滚动的时候,最大可视范围其实是11个cell,其中2个是不完整的。所以不论是重用机制还是面试官所说的那个方法都是11个内存,可能就是刚好滑到可视范围为10个的时候内存会相差一个。
不知道大家对这样的说法有什么见解。希望能告诉一下我。
网友评论