zoukankan      html  css  js  c++  java
  • 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;
    }
  • 相关阅读:
    centos搭建window下写的flask程序
    【MTK】iwpriv命令说明
    vs2019专业版离线安装方法
    Python文件编译成exe
    python3升级与安装
    谷歌浏览器https和flash禁用的解决方法
    SQL注入常见函数
    nmap简介与运用
    WPF 万维网对战象棋 客户端+服务端(全套可执行代码在文章末尾)
    《软件工程实践》2020春季学期教学回顾--线上教学,化弊为利
  • 原文地址:https://www.cnblogs.com/dabaomo/p/5207038.html
Copyright © 2011-2022 走看看