zoukankan      html  css  js  c++  java
  • UITableView 性能优化(卡问题自检)

    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,数据获取后过多的计算也很影响性能。

  • 相关阅读:
    [Hyperapp] Render Text with JSX in Hyperapp
    [Hyperapp] Interact with the State Object through Hyperapp Action functions
    [ReactVR] Start a Virtual Reality Project Using the React VR CLI
    [Javascript] Delegate JavaScript (ES6) generator iteration control
    [Javascirpt] Developer-friendly Flow Charts with flowchart.js
    [TS] Class Properties Public, Private and Read Only Modifiers
    [Python + Unit Testing] Write Your First Python Unit Test with pytest
    [React] React.PureComponent
    [Angular + TsLint] Disable directive selector tslint error
    [Angular] Create a ng-true-value and ng-false-value in Angular by controlValueAccessor
  • 原文地址:https://www.cnblogs.com/417460188dy/p/3220902.html
Copyright © 2011-2022 走看看