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。

代码嘛,能省则省!

步骤

  1. 在storyborad中设置cell的标识
  2. 在代码中利用设置的标识读取cell

注意点

  • cell里面还有个View,是contentView,如果要添家内容的话,IOS官方的建议是:添加到ContentView中
  • 如果你在storyBorad中添加的话,系统会默认添加到contentView中
  • storyBorad中也可以在添加多个cell
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容