2012-04-17 11 views
1

私のアプリでは、私は300イメージ(400 kB)を表示するスクロールビューを使用します。 2分ほどかかるので、上下にスクロールするとスムーズではありません。ScrollViewが遅すぎる - メモリ管理の問題?

どうすればこの問題を解決できますか?

注:スクロールビューの最後までスクロールした後、スムーズになります。 スクロールに関する問題が初めて表示されます。

+0

あなたの質問はどのようにメモリ管理に関係していますか?あなたはアプリのプロファイリングを試しましたか? – trojanfoe

答えて

0

は(あなたのイメージをロード)あなたのロード機能でこれを追加してみてください。 whileまたはforループを使用してイメージをロードする場合は、このコードをループに追加します。

NSURL *url=//here url for your image 
dispatch_queue_t currentQueue = dispatch_get_current_queue(); 
dispatch_queue_t dataConvertorQueue = dispatch_queue_create("Fetching images", NULL); 
dispatch_async(dataConvertorQueue, ^{ 
    NSData *data = [NSData dataWithContentsOfURL:url]; 
    dispatch_async(currentQueue, ^{ 
     //replace imageView with your imageView outlet 
     imageView.image = [[UIImage alloc] initWithData:data]]; 
    }); 
}); 
dispatch_release(dataConvertorQueue); 

このコードは、URLから画像を取得して表示するのに役立ち、テーブルビューでうまく機能します。それはあなたが望むものではないかもしれませんが、それはあなたにそれを行う方法のアイデアを与えるでしょう。それがあなたを助けることを願っています。

0

すべての画像を先に読み込まないでください。その瞬間と次の最後の画像に表示する画像をロードするだけです。

私の知る限り、スクロールビューの読み込み/表示時にすべての画像が読み込まれることを理解しています。あなたは画像をたくさん持っているので、メモリに3つの画像をロード/保持するだけで、はるかに高速で、より多くのメモリを節約できます。 これは、表示されている前/左の画像で、表示されません。現在表示されている画像と表示されていない次/右の画像です。

左にスワイプすると、スクロールビューが基本的に左に移動し、既に読み込まれている右のイメージが表示されます。バックグラウンドでは、次の右のイメージをロードしますが、最も左のイメージの割り当てを解除します。

常に最大4枚の画像が読み込まれています。

WWDC 2011 - セッション104の高度なスクロールビューの無限のスクロールビューの例を見てください。

+0

あなたはもっと説明できますか?私はうまく理解しています。 – yatanadam