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;
    }
  • 相关阅读:
    android 多线程
    Uva 10881 Piotr’s Ants 蚂蚁
    LA 3708 Graveyard 墓地雕塑 NEERC 2006
    UVa 11300 Spreading the Wealth 分金币
    UVa 11729 Commando War 突击战
    UVa 11292 The Dragon of Loowater 勇者斗恶龙
    HDU 4162 Shape Number
    HDU 1869 六度分离
    HDU 1041 Computer Transformation
    利用可变参数函数清空多个数组
  • 原文地址:https://www.cnblogs.com/dabaomo/p/5207038.html
Copyright © 2011-2022 走看看