UITableView学习总结2(性能优化)

UITableView学习总结2(性能优化)
文章图片
UITableView学习总结 UITableView性能优化

IOS默认会使用懒加载的方式创建cell,但是如果数据量大的话,会抢占较多的内存,尤其是返回之前的数据,IOS是默认重新请求的。
  • 个人建议,如果数据量不是很大的话,就用上面的方式就可以了,直接用模型装起来,用的时候直接拿,比较方便。
  • 如果数据量大,再通过通过缓存池的方式来创建
缓存池
  • 顾名思义,就是放缓存的地方,你加载过的数据,都放在这里
  • 缓存池的好处也是明显的,就是节约内存,这也是我们最最需要优化的地方。
  • 话不多说,开始上代码。
缓存池请求方式
其他的仍然不变,关键代码还是在cell中
/** 一般写法 */ UITableViewCell *cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:nil]; //覆盖数据 Hero *hero = self.heroes[indexPath.row]; cell.textLabel.text = hero.name; cell.imageView.image = [UIImage imageNamed:hero.icon]; cell.detailTextLabel.text = hero.intro;

/** 性能优化的写法 *///定义标识符 static NSString *ID = @"hero"; //缓存池查找数据 UITableViewCell*cell = [tableView dequeueReusableCellWithIdentifier:ID]; //判空,如果没有就根据id初始化 if(cell == nil){ cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:ID]; } //覆盖数据 Hero *hero = self.heroes[indexPath.row]; cell.textLabel.text = hero.name; cell.imageView.image = [UIImage imageNamed:hero.icon]; cell.detailTextLabel.text = hero.intro;

/** * 注册的写法 * 可节省判空操作 *///定义标识符 NSString *ID = @"hero"; - (void)viewDidLoad { [super viewDidLoad]; //注册标识符对应的cell类型 [self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:ID]; }

如此,整体性能便提升了。
最后,还有个更简单的用法:
StoryBorad方式
*StoryBorad中,可以直接设置identifier*

在storyborad的属性检查选项中,可以直接设置identifier。
【UITableView学习总结2(性能优化)】代码嘛,能省则省!
步骤
  1. 在storyborad中设置cell的标识
  2. 在代码中利用设置的标识读取cell
注意点
  • cell里面还有个View,是contentView,如果要添家内容的话,IOS官方的建议是:添加到ContentView中
  • 如果你在storyBorad中添加的话,系统会默认添加到contentView中
  • storyBorad中也可以在添加多个cell

    推荐阅读