2

私は、uitableviewcell の imageview に多数のローカル画像を表示する必要があるアプリケーションを構築しています。ただし、uitableview のパフォーマンスを最適化するのに苦労しています。特に 2 つの問題に気付きました。まず、ビューの読み込みに時間がかかります。次に、新しいセルが表示されるとスクロールが遅くなります。

viewDidLoad は次のように画像に読み込まれます。

for (Object *object in self.objects)
{
    object.thumbnail = [UIImage imageNamed:object.imageName];
}

これは明らかに長時間の読み込みの問題を引き起こしていますが、これらの画像を読み込む方法が他にわかりません。サイズの問題ですか?これは単に悪い方法ですか?

画像を表示するプロセスにも問題があるようです。つまり、画像がサムネイル プロパティに割り当てられた後でも、描画に時間がかかりすぎます。

これは特定のケースですが、アップルがどのようにして写真の画像を効率的にロードするのか、より一般的なことに興味があります。洞察はありますか?ありがとう

4

3 に答える 3

1

UI が遅れていることに気付いた場合、最初に疑うのは、(バックグラウンド スレッドで) 非同期で実行する必要がある何らかの操作を (メイン スレッドで) 同期的に実行していることです。

また、Apple が写真アプリでそのパフォーマンスを正確にどのように達成しているのかについても非常に興味があります。現在、あなたと同様の要件を持つアプリを作成しています。私の現在のアプローチは、ユーザーがView Controllerを開くとすぐにディスクから大量の写真を非同期にメモリにロードし、ユーザーがスクロールするときに事前にメモリからロード(および写真の削除)を続けることです。

現在、インデックス パスの行のセルにディスクから各写真を非同期的にロードしています。これはかなり高速ですが、テーブル ビューをすばやくスクロールすると、このカスケード効果が発生します。つまり、写真が表示される前にセルが一瞬空に見えます。

これがあなたに光を当てることを願っています。

また、SDWebImage を試すことにも興味があるかもしれません。これには、ローカルの写真を扱うときに私の人生を楽にしてくれるイメージ キャッシュ オブジェクトが含まれています。

于 2014-01-30T16:55:02.367 に答える
0

彼らはおそらく、さまざまな切り離されたスレッドでバックグラウンドですべてを実行しています。これにより、大量の情報をホスト/提示するアプリケーションで大幅な流動性が可能になります。私はさまざまなアプリケーションで自分でフォト ギャラリーを作成し、さまざまな Web API などから多くの写真を同時に読み込みました。新しいスレッドを作成し、割り当てを効率的かつ正確に管理するだけで、非常にスムーズなインターフェイス/インタラクションを得ることができます。

于 2012-11-20T20:32:56.670 に答える
0

長い読み込みの問題は、コードのこの部分が原因で発生します - UIImage imageNamed:、このメソッドはすべての画像を同じスレッドにキャッシュし、メモリが過負荷になるとアプリをクラッシュさせる可能性があるためです。

このライブラリを見てみてください - あなたが達成しようとしていることができるはずです:) http://www.cocoacontrols.com/platforms/ios/controls/ktphotobrowser

于 2012-11-20T20:33:38.937 に答える