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;
    }
  • 相关阅读:
    HashMap和Hashtable及HashSet的区别
    Android获取系统的时间
    Android的布局属性
    ListView 在代码里设置margin
    如何用Vue自己实现一个message提示插件
    JS获取最近三个月日期范围
    css实现表单label文字两端对齐
    my utils
    Vue 路由&组件懒加载(按需加载)
    C# 通过window消息控制指定控件的scroll滚动
  • 原文地址:https://www.cnblogs.com/dabaomo/p/5207038.html
Copyright © 2011-2022 走看看