你的位置:首页 > 软件开发 > 操作系统 > UITableView优化的那些事儿

UITableView优化的那些事儿

发布时间:2016-01-13 18:00:13
作为iOS开发,UITableView可能是平时我们打交道最多的UI控件之一,其重要性不言而喻。关于TableView,我想最核心的就是UITableViewCell的重用机制了。简单来说呢就是当TableView滚动时,会调tableView:cellForRowAtIndex ...

作为iOS开发,UITableView可能是平时我们打交道最多的UI控件之一,其重要性不言而喻。

关于TableView,我想最核心的就是UITableViewCell的重用机制了。

简单来说呢就是当TableView滚动时,会调tableView:cellForRowAtIndexPath:这个方法,TableView只会创建屏幕内或者只比屏幕多一点点的cell,当滚动需要展现新的cell的时候,TableView首先会把已经移出屏幕外的cell放入到缓存池中去,然后再从缓存池中取出新的cell用来展示,当缓存池中没有的时候,则会创建新的cell。但是cell可能不仅仅是一种,我们怎么来辨别我们需要的cell呢?苹果公司已经为我们做好了一切,我们只需要简单地设置一个identifier即可,TableView便可自动根据identifier从缓存池中去出相应cell出来复用。这样就极大的节省了内存的开销。 

知道cell的复用原理后,我们再来看看TableView的回调方法。我们知道,TableView继承自UIScrollView,必须先确定它的contentSize和每个cell的位置,这样才能正确的放置每个cell。所以在创建或者复用cell之前,tableView会调用tableView:heightForRowAtIndexPath:来确定contentSize和每个cell的高度,之后再调用tableView:cellForRowAtIndexPath:显示相应的cell。然而此举对于那些成百上千不定高的cell,计算高度会相当消耗性能。

所以首先我们围绕cell来看看TableView如何进行优化

1.cell复用

这个很简单,只要注册一下,便会自动复用

  -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath  {    static NSString *Identifier = @"cell";    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];    if (!cell) {      cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:ID];    }        return cell;  }

原标题:UITableView优化的那些事儿

关键词:ie

ie
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。