美文网首页
UITableView展示数据的内存优化

UITableView展示数据的内存优化

作者: 丹丹十个胆小鬼 | 来源:发表于2018-12-10 16:37 被阅读0次

    1、优化思路

    首先会根据ID这个标识去缓存池取可循环利用的cell;如果缓存池中没有可循环利用的cell,会判断有没有根据ID这个标识注册对应的cell类型,如果有注册,会自动创建这种类型的cell,并且绑定ID这个标识返回,如果没有注册,会去SB中查找,如果没有,需要手动创建cell。

    • 注意
      使用注册的方法不能设置cell的类型(因为它的使用cahng jing)

    2、代码实现

    - (void)viewDidLoad {
        [super viewDidLoad];
        // 根据ID这个标识注册对应的cell类型为UITableViewCell
        // 只需要注册一次,不能放在这个代理方法中,一般都是放在viewDidLoad方法中
        [self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:carID];
    }
    
    #pragma mark -dataSource方法
    - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
        return self.carGrounps.count;
    }
    
    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
        FLCarGrounp *carGroup = self.carGrounps[section];
        return carGroup.carsArray.count;
    }
    
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
        
        // 根据ID这个标识注册对应的cell类型为UITableViewCell
        // 只需要注册一次,不能放在这个代理方法中,一般都是放在viewDidLoad方法中
    //    [tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:carID];
        // 先从缓存器中取cell
        // dequeueReusableCellWithIdentifier这个方法内部首先会根据ID这个标识去缓存池取可循环利用的cell;如果缓存池中没有可循环利用的cell,会判断有没有根据ID这个标识注册对应的cell类型,如果有注册,会自动创建这种类型的cell,并且绑定ID这个标识返回
        // 特点:不能设置cell的类型
        // 场景:自定义cell
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:carID];
        // 缓存器中没有cell,就直接创建
    //    if (cell == nil) {
    //        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:carID];
    //        cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
    //     }
        NSLog(@"cell:%p", cell);
        FLCarGrounp *carGrounp = self.carGrounps[indexPath.section];
        FLCar *car = carGrounp.carsArray[indexPath.row];
        cell.imageView.image = [UIImage imageNamed:car.icon];
        cell.textLabel.text = car.name;
        
        return cell;
    }
    
    - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
        FLCarGrounp *carGroup = self.carGrounps[section];
        return carGroup.header;
    }
    
    - (NSString *)tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section {
        
        FLCarGrounp *carGroup = self.carGrounps[section];
        return carGroup.footer;
    }
    
    #pragma mark UITableviewDelegate方法
    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
        FLCarGrounp *carGroup = self.carGrounps[indexPath.section];
        FLCar *car = carGroup.carsArray[indexPath.row];
        NSLog(@"选中了%@", car.name);
    }
    

    相关文章

      网友评论

          本文标题:UITableView展示数据的内存优化

          本文链接:https://www.haomeiwen.com/subject/prcdhqtx.html