• UITableView中的cell的优化


     1.cell的重用

       所谓的cell的重用就是,视图加载的时候只会创建当前视图中的cell,或者比当前视图多一点的cell, 当视图滚动的时候,滚出屏幕的cell会放进缓存中,滚进屏幕的cell会根据Identifier从缓存中获取cell,如此的循环往复,这样只会创建固定的cell对象,节省了内存。

    下面是重用cell的代码:

     //1. 定义重用的标识

       static  NSString *reuseId = @"tg";

        //2,从缓存中获取重用cell

        CZTgCell *cell = [tableView dequeueReusableCellWithIdentifier:reuseId];

        

        //3.判断如果cell等于nil 就创建cell

        if (cell == nil) {

            cell = [[[NSBundle mainBundle]loadNibNamed:@"CZTgCell" owner:nil options:nil]lastObject];

        }

        return cell; 

      2.为什么定义重用标识符的时候,定义为静态的

        cell调用的次数相当多,会创建多次标识符对象,而静态的变量只会创建一次开辟一块内存,节省了内存空间。

      3.cell的init方法的注意点

       重写init方法,添加子控件时,在这个方法中,需要对控件的一次性属性进行设置,所谓的一次性属性,指的是像文字的大小啊文字的颜色啊之类的固定值,因为这些属性和数据没有关系,提高了性能。

        注意:设置控件的frame,直接在init方法中headView的frame没有效果,所以要在layoutSubviews方法中设置各个子控件的frame,这个方法必须重写父类的方法。

     4.cell重用的时候,不光要覆盖数据,也应该要覆盖对应的状态,否则重用的时候会把状态和数据都会重用

      重用解决:在重写模型的set方法,覆盖数据和状态。

    5.cell的行高的问题

      cell创建之前多次计算行高,如果行高是固定的,那尽量少用下面的代理方法,因为它会多次调用并计算行高,可以用tableView的rowHeight属性

      -(CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath;

    MDM相关内容
  • 相关阅读:
    求约数的个数-牛客
    成绩排序 -- 牛客
    SpringBoot学习笔记4-整合Jdbc Template-Mybatis-多数据源-事务管理-JPA
    SpringBoot学习笔记3-自定义拦截器-全局异常处理-Freemarker-Thymeleaf-定时任务调度
    SpringBoot学习笔记2-日志管理-开发模式-web开发-FastJson
    SpringBoot学习笔记1-简介-全局配置文件-starter-profiles-自动配置原理
    将Ueditor文件上传至OSS
    nouveau :failed to create kernel chanel,-22
    教你怎么炼鸡肉
    教你怎么写猜年龄游戏
  • 原文地址:https://www.cnblogs.com/liyy2015/p/5131950.html
Copyright © 2020-2023  润新知