iPhoneでUITableViewを高速化

開発中のあるアプリケーションでは、UITableViewを使用して情報を表示しました。 そして、ここでは、この要素の作業を高速化するために発明された方法を説明します。



画像



ジャンルのリストはUITableViewです。

UITableViewは、UITableViewCellセルで構成されます。 リストに含まれるセルの数、各セルの高さをレポートし、それらをセクションに分割できます。 セルを表示する必要がある場合、関数が呼び出されます:

-(UITableViewCell *)cellForRowAtIndexPath:(NSIndexPath *)indexPath

作業のメカニズムは、セルが画面の後ろに消えた場合、次のショーでアプリケーションが再びセルを要求するというものです。



そこにセルを作成し、内容を入力して返さなければならないことが理解されています。 しかし、常に新しいセルを作成することは無駄であり、要素をほとんど含まないセルにのみ適しています。



私のアプリケーションでは、セルごとに約10の異なる要素(UILabel、UITextView、UIImageView)がありました。 同時に、約5つのセルが画面に表示されました。 スクロールする際に激しいブレーキがかかりました。 そして、多くの実験の後、私はそのような重いリストをスクロールするための可能な高速化の全リストを得ました。 時系列およびその速度で表示されます。



1) -(UITableViewCell *)dequeueReusableCellWithIdentifier:(NSString *)識別子

この関数を使用すると、NIBファイルからセルを作成する時間を節約できます。作成済みのセルが返されますが、その内容を現在のセルに変更する必要があります。

これは、Apple自身が推奨する方法です。 多くの場合、それらの例に含まれています。

短所

-セルの内容を置き換えるには時間が必要です

長所

-メモリの節約



2)すべてのセルを事前に作成し、NSArrayまたはNSMutableArrayに保存します。

この場合、セルは一度作成され、配列に保存されます。 セルが要求されるたびに、インデックスによって配列から取得する必要があります。 または、すべてのセルを一度に作成することはできませんが、要求された場合にのみ作成し、配列に保存できます。 どちらの場合も、セルは一度だけ作成されます。

セル内にアニメーションが存在するため、この方法を使用する必要がありました。

短所

-すべてのセルにメモリが必要

-すべてのセルが一度に作成されている間、中断できます

長所

-戻りの速度、時間は配列要素へのアクセスにのみ費やされる



3) UIScrollView

このオプションは、UITableViewの代わりにUIScrollViewを使用することを意味します。つまり、UIViewをスクロールできます。 すべてのセルを作成し、UIScrollViewにサブビューとして配置し、スクロールサイズを設定します。

方法2はスクロール速度に適さないため、この方法が使用されました。

短所

-すべてのセルにメモリが必要

-高速は1500ピクセルの高さまでしか機能しませんでした

-ユーザーインタラクションの実装の難しさ

長所

より高速なスクロール



そして、私たちのチームが完全に絶望したとき、彼らは使用され始めた別のオプションを思い出しました。



4)セルのスクリーンショット。



一番下の行は、セルでスクリーンショットを作成するものです。 ブレーキは明らかに多数のサブビュー(セル要素)によって引き起こされました。 それでは、10の代わりにsubViewを作成してみましょう。1には10個すべてのグラフィカルな表現が含まれます。



MyCellは、適切なコンテンツで既に満たされている元のセルです。

UIGraphicsBeginImageContext(((UIView*)MyCell.frame.size);

[((UIView*)MyCell.layer renderInContext:UIGraphicsGetCurrentContext()];

UIImage* image = UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();







画像に保存された画像は、単一のUIImageViewでセルに追加できます。

セルの非常に簡単なリストであることがわかりました。

短所

-作成時間が必要です

-セルとそのスクリーンショットを保存するには、少なくとも2倍以上のメモリが必要

長所

-最速のスクロール



UPD:

最初の方法を使用すると、すべてが正常に描画されると人々は言いますが、残念ながら、私は以下を使用しているため、この方法は使用できません。

-3種類の異なるセル

-セルにアニメーションがあります



セル内の要素数をカウントし、セルあたり22カウント



All Articles