【ios开发】UITableViewCell的重用

移动开发须要解决的一个问题就是资源稀缺的问题。多数状况下是内存问题。ios

虽然如今的手机都号称大内存,高配置。可是移动app所占用的资源也在跟着不断膨胀,app

也是形成内存不足的主要缘由。ide

 

在前面的例子中,还记得咱们是怎样建立UITableView的cell的吗?优化

若是不记得,没有关系,请看下面的代码:spa

 

在这个方法调用过程当中,每次都会实例化一个UITableViewCell,一个cell表明一个内存地址。code

当数据量不是很大的状况下,问题不是很明显。可是若是数据不少的话,那么这个方法在实例化cell的时候就会申请大量的内存,blog

以知足程序的正常运行。队列

 

假如咱们有100条数据,那么程序要显示完这100条数据的话,就要向系统申请100个内存地址。内存

可是若是咱们把TableView从顶部滚动到底部,而后再从底部滚回到顶部,内存地址的需求就变为200个。资源

由于咱们都知道,屏幕上每显示一行数据,tableView: cellForRowAtIndexPath:方法就被调用一次。

每次调用都会从新分配内存,这显然不是一个好的实现。apple做为一个很是重视用户体验的公司,不可能不会发觉这个问题的。

 

UITableViewCell的重用

原理:假如屏幕最多能显示10条数据,当第一次启动程序,这10个内存地址一次分配完成,而后咱们向下滚动TableView,

当第一行cell超出屏幕范围不可见后,这个cell所占的地址就能够被重用。若是还不明白的请看下图。

小声的说一下,andriod开发中listview的优化跟ios中UITableView思想基本同样。

 

 

TableView提供了下面的方法帮咱们达到重用cell的目的:

- (id)dequeueReusableCellWithIdentifier:()NSString *identifier

UITableView内部维护了一个可重用cell的队列,使用上面的方法,咱们能够在该队列中取出可重用的cell。
可是只有当队列中有数据时这个方法才返回UITableViewCell的实例,不然返回nil。所以咱们要确保cell被成功初始化。

下面咱们从新改造cellForRowAtIndexPath方法



在viewDidLoad方法中添加下面的代码,该方法能确保cellForRowAtIndexPath方法中返回的cell不为nil


最后说明一下这个reuseIdentifier的做用,当咱们的界面中有多个TableView的时候,
这几个TableView中的cell类型不必定相同,那么就可使用它来标识咱们重用的是哪种类型的cell。
下面是代码中reuseIdentifier的定义:
相关文章
相关标签/搜索