8

セル (UITableViewCell および UICollectionViewCell) の自動レイアウトを使用していますが、セルを再利用するとパフォーマンスが大幅に低下することに気付きました。これを改善するにはどうすればよいでしょうか。

セルを作成/構成する方法が原因である可能性があります。アプリで本をセルとして表示する必要があり、本のジャンルによってレイアウトが異なりますが、BookCell は 1 つしかありません。セルの作成時に制約を再構成します/本のジャンルに基づいて特定の本に再利用されます。

私の理解では、私の場合、手順は次のとおりであるため、自動レイアウトは固定フレームよりも遅くなるはずです。

自動レイアウト

  1. 現在の拘束を削除
  2. 本のジャンルに応じて制約を再追加する
  3. 本のすべてのラベル/画像ビューを設定する

内部的には、ステップ 2 で iOS が制約ソルバーを再実行し、ステップ 3 で制約を再調整 (つまり、ソルバーを再実行) して、テキストと画像が設定されたすべてのラベルと画像ビューを満たすと考えています。

固定レイアウト

(さまざまなジャンルのラベル、画像ビュー、さまざまなフレームのリストがあります) 1. すべてのラベル、画像ビューのフレームを再設定します 2. ラベルのテキストと画像ビューの画像を設定します

すべての自動レイアウト セルを固定フレームを使用するように変換するには時間がかかります。パフォーマンスを向上させるために考えられることは次のとおりです。

  1. 一般的な BookCell を複製し、ジャンルごとに 1 つのセルを作成します。
  2. 制約を設定する前に、すべてのラベル、画像ビューを設定します
  3. updateConstraintsメソッドまたはイニシャライザ (例)に自動レイアウト制約を追加する必要がありますinitWithTableViewCellStyle:reusableIdentifier:か?

どうもありがとう!

4

2 に答える 2

5

自動レイアウトからフレームへの変換には時間がかかり、パフォーマンスのメリットはほとんどありません。iOS7 で開発する場合の複雑さは言うまでもありません。(これに関する私の他の回答はこちらをご覧ください)。

Kugler の研究が示すように、Auto Layout は十分に高速であるはずです。フレームや自動レイアウトを忘れないでください。これらはすべて、最新の CPU が得意とする数学計算に帰着します。

あなたの場合、まったく異なるアプローチをお勧めします。まず、制約を正しく、適切な場所で操作していることを確認します。つまりupdateConstraints、 とupdatedViewConstraints. 制約の追加または削除は、コストのかかる操作です。しかし、実際には、これらのメソッドを使用して、ビューの作成時に一度だけ実行する必要があります。繰り返し追加して例外が発生しないように、制約が既に作成されていることを確認することを忘れないでください。

また、constant. 前述の方法以外でできること。

次に、テーブル ビューで何が起こっているかを考えてみましょう。スクロールが速くcellForRowAtIndexPath、次のセルを求めています。あなたの場合、セルはすべてかなり異なって見えます。これを解決するには、reuseIdentifierバリエーションごとに異なる を使用します。

セルに入力するデータ操作が最小限である限り、最初のセル作成時に小さな震えが見られる場合があります。ただし、その後のスクロールは非常にスムーズになるはずです。

于 2013-10-25T09:51:17.133 に答える
3

私の理解から、私の場合、自動レイアウトは固定フレームよりも遅くなるはずです

自動レイアウトは、ほとんどの場合、遅くなります。ただし、ほとんどの場合、自動レイアウトと固定レイアウトの使用の違いは目立ちません。

異なるジャンルが 5 つしかない場合は、ジャンル/レイアウトごとに異なる一意のセル再利用識別子を使用しても問題ありません。デキュー操作のたびに制約を追加/削除する必要がなくなります。詳細については、この素晴らしい回答を参照してください: https://stackoverflow.com/a/18746930/1990236

于 2013-10-25T09:16:08.590 に答える