tableViewCell的复用方法
来源:互联网 发布:java接口关键字 编辑:程序博客网 时间:2024/06/06 08:24
一开始写tableView的时候我每一个Cell都加到了tableView的视图上去了,这样十分浪费内存。其实可以只创建若干个Cell,当其中的部分Cell滑出Device的界面时它就闲置了,当加载下一个cell时可以把这些闲置的cell复用,要注意的是复用时先前的cell的一些状态都是在的。
下面是我写的添加cell的代理方法,这种方法对内存消耗就很大了,因为没有
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { UITableViewCell *cell = [[UITableViewCell alloc] init]; cell.textLabel.text = [self.arr[indexPath.section] objectAtIndex:indexPath.row]; return cell;}
所以要用缓存池来解决这个问题,先静态设置一个NSString 类型的identifier标志Cell,在缓存池中找有没空闲的cell如果有就直接把该Cell拿来重新赋值,否则创建一个cell。
static NSString *identifier = @"myCell";- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier]; if(cell == nil){ cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier]; } cell.textLabel.text = [self.arr[indexPath.section] objectAtIndex:indexPath.row]; return cell;}
如果是用nib文件自定义cell的话复用代码如下:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *identifier = @"myCell"; if (nib == nil) { nib = [UINib nibWithNibName:@"TableViewCell" bundle:nil]; [tableView registerNib:nib forCellReuseIdentifier:identifier]; } TableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier]; cell.cellImage.image = [UIImage imageNamed:@"头像"]; cell.cellLabel.text = [arrBig[indexPath.section] objectAtIndex:indexPath.row]; return cell;}
PS:nib文件的复用nibsRegistered的写法也不是很稳妥,UINib这对会预加载进内存,然后创建的时候,会获取此对象并初始化。在内存充足的时候这个是没有问题的,但是当内存不足的时候,会释放掉此UINib,导致nibsRegistered = Yes,但是tableview注册的UINib已经被释放了,所以就会创建cell失败。
0 0
- tableViewCell的复用方法
- 解决tableViewCell的复用问题的方法
- 解决tableviewCell覆盖的问题以及tableviewCell复用原理
- 自定义一个tableViewCell的方法
- 改变tableViewCell高度的方法
- 获取tableViewcell副标题的方法
- Storyboard 下 TableViewCell的复用
- 自定义tableViewCell 的复用问题
- TableViewCell内含textField的复用
- TableViewCell 复用解决
- tableviewcell加载的几种方法
- tableViewCell根据内容自适应高度的方法
- tableViewCell的网络图片加载方法
- 三种初始化加载tableViewCell的方法
- TableViewCell的复用出现数据重复的解决方法
- TableViewCell注册及复用
- iOS tableViewCell复用问题
- UITableView使用及TableViewCell的复用机制
- iOS 获取苹果设备的IP地址
- YaHoo 初始化css代码+IE常见兼容问题汇总
- 机器学习 之 生成式模型 VS 判别式模型
- POJ_2260_ErrorCorrection
- org.hibernate.MappingException: An association from the table tuser refers to an unmapped c
- tableViewCell的复用方法
- 为什么C#串口程序在关闭串口时候会死锁
- 第三方框架
- android 记录和恢复ListView滚动的位置 四种方法
- 开发日记
- mui.fire()用法
- 队列复习篇之顺序存储结构
- c#操作sqlite
- 在一个界面使用定时器后,退出界面后,一定要记得取消定时器