0

EasyTableViewライブラリを使用しています。Tableviewの行を動的に作成しているときに、Instrumentsでパフォーマンスが大幅に低下するのはなぜですか。

上の画像のコードは次のとおりです。

CGRect buttonRect   = CGRectMake(10, 0, 473, 677);
    UIButton *button    = [UIButton buttonWithType:UIButtonTypeCustom];
    button.frame = buttonRect;
    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, button.frame.size.height-100, button.frame.size.width,50)];
    label.backgroundColor = [UIColor blackColor];
    label.textColor = [UIColor whiteColor];
    label.textAlignment = NSTextAlignmentCenter;
    [button addSubview:label];
    // Use a different color for the two different examples
    return button;

パフォーマンスの遅れ

4

2 に答える 2

0

そのスクリーンショットに基づいてパフォーマンスの問題があるかどうかを判断することは不可能です。ボタンの内部に34%の時間がかかるだけですがviewForRect、これはおそらくごくわずかです。より良い画像を取得するには、Instrumentsの右側のサイドバーを開いて時間がどこに行くかを確認するか、コードビューではなくタイミングでコールトレースを表示します。

現在、一般的に、セルビューの作成はボトルネックではありませんが、UITableViewでそれらを再利用しないことはボトルネックです。

于 2013-02-04T08:05:15.763 に答える
0

すべてのセルのセルビューを再生成しているように見えます(つまり、ビューを再利用することはありません)。EasyTableViewのドキュメントを見ると、ETVにはビューキャッシュメカニズムが組み込まれていないように見えるため、テーブルビューのすべての行に対して新しいビューが生成されます。

また、テーブルビューに数十または数百の行がある場合、深刻な問題が発生します。EasyTableViewを削除し、セルビューのキャッシュと再利用を備えたUITableViewを使用することをお勧めします。

または、独自のビューキャッシュを実装して再利用します。したがって、あなたの場合、UIButtonのプールがあり、UIButtonを返す必要があるたびにeasyTableView:viewForRect:、現在画面に表示されていないものがあるかどうかを確認してください。その場合は、それを再利用して、必要なものを変更します(テキストのラベル付けなど)。それ以外の場合は、新しいものを作成します。

于 2013-02-04T11:10:45.217 に答える