UITableView 性能优化(卡问题自检)

 

1.使用不透明视图。

    不透明的视图可以极大地提高渲染的速度。因此如非必要,可以将table cell及其子视图的opaque属性设为YES(默认值);

    其中的特例包括背景色,它的alpha值应该为1(例如不要使用clearColor);

    图像的alpha值也应该为1,或者在画图时设为不透明。

 

2.减少视图的数目。

    view是很大的对象,创建它会消耗较多资源,并且也影响渲染的性能。

    最佳的解决办法还是继承UITableViewCell,并在其drawRect:中自行绘制:

    - (void)drawRect:(CGRect)rect

    {   

               if (image)

         {

              [image drawAtPoint:imagePoint];

              self.image = nil;

         }

         else

         {

              [placeHolder drawAtPoint:imagePoint];

         }

         [text drawInRect: textRect withFont: font lineBreakMode: UILineBreakModeTailTruncation];

    }

       

此外还可以创建CALayer,将内容绘制到layer上,然后对cell的contentView.layer调用addSublayer:方法。这个例子中,layer并不会显著影响性能,但如果layer透明,或者有圆角、变形等效果,就会影响到绘制速度了。解决办法可参见后面的预渲染图像。

       

3.不要做多余的绘制工作。

在实现drawRect:的时候,它的rect参数就是需要绘制的区域,这个区域之外的不需要进行绘制。

 

4.预渲染图像。

    你会发现即使做到了上述几点,当新的图像出现时,仍然会有短暂的停顿现象。解决的办法就是在bitmap context里先将其画一遍,导出成UIImage对象,然后再绘制到屏幕,详细做法可见《利用预渲染加速iOS设备的图像显示》。

 

5.不要阻塞主线程。

    另外,自动载入更新数据对用户来说也很友好,这减少了用户等待下载的时间。例如每次载入50条信息,那就可以在滚动到倒数第10条以内时,加载更多信息:

 

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath

{

    if (count - indexPath.row < 10 && !updating)

    {

         updating = YES;

         [self update];

    }

}// update方法获取到结果后,设置updating为NO

 

6,数据获取后过多的计算也很影响性能。

 

 

posted on 2013-07-28 11:07  童话DY  阅读(272)  评论(0编辑  收藏  举报