UITableViewCell的重用机制

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UITableViewCell的重用机制相关的知识,希望对你有一定的参考价值。

UITabelView一般会显示大量数据,如果有多少条数据就新建多少个cell,那么对于内存来说是种极大的负担,这样自然是不合理的,所以才会有重用机制

比如一个家庭办酒席,一共有13桌,每桌20个菜,那么准备150个左右的盘子就够盛菜了,如果盘子不够用了就把之前已经吃光菜的盘子收走洗洗干净就能重复使用了,这大致上就是重用机制的展示了

 

 

下图显示的cell一共有6个

技术分享

当把显示金毛的这个cell滚出屏幕外了,这个cell就会被自动放进重用池中。当哈士奇下面一个的cell出现的时候,就会自动去重用池中找一个cell使用,这样就避免了不停去创建cell导致内存崩溃的问题

技术分享

 

下面是代码举例:

//设置每行显示什么内容,也就是指定每一行的cell
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    
    //创建一个重用标识符
    static NSString *reuseIdentifier = @"reuse";
    
    //表视图通过重用标识符去重用池中查找是否有能够被重用的cell
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:reuseIdentifier];
    
    if (cell == nil) {
        //创建一个cell
        /**
         cell样式有四种
         default、subititle、value1、value2
         */
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:reuseIdentifier] autorelease];
        NSLog(@"创建了一个新的cell");
        cell.selectionStyle = UITableViewCellSelectionStyleNone;
    }
    
    
    
    //指定cell内部空间的显示内容
    //重用池中取出的cell,并没有释放,所以会保留原有的内容,如果想要显示自己的信息,需要对cell内部的控件进行重新赋值
//    cell.textLabel.text = @"你是朱珍洁吗";
//    cell.detailTextLabel.text = @"你才是猪";
    
    cell.textLabel.text = _dataArray[indexPath.section][indexPath.row];
    
    cell.imageView.image = [UIImage imageNamed:@"mao.jpg"];
    
    return cell;
}

 

以上是关于UITableViewCell的重用机制的主要内容,如果未能解决你的问题,请参考以下文章

iOS-UITableviewCell的重用机制和常见问题

iOS-UITableView重用机制

UITableViewCell重用的问题

UItableviewCell 单元格重用问题

更改 UITableViewCell 中的对象也更改了重用 UITableViewCell 的对象

UITableView滚动式cell错位