URL からアプリに画像を読み込んでいます。画像サイズが大きい(約1.5Mb)。多くのスレッド (例: 2 つのスレッド) を使用してこのイメージをロードし、速度を向上させるにはどうすればよいですか? 1 つのスレッドを使用してこの画像を読み込む場合、約 5 秒かかるため、この時間を短縮したいと考えています。
2 に答える
あなたは正しいです。1.5Mb は大きなイメージであり、最適化する方法は多くのスレッドを使用しないことです。あなたは正しい軌道に乗っていますが。この手法は「スライシング」と呼ばれ、画像をより速くロードするために Web で頻繁に使用されます。画像を取得し、サーバーで 3 つまたは 4 つの小さな写真 (それ以上ではない) にスライスします。レンダリング時に、これら 4 つのイメージを一度に呼び出します。1 つの大きな写真よりも速く読み込まれます。また、これにより、エンドユーザーの「知覚される」待ち時間が短縮されます。
また、画像をスライスすると、画像のその部分を表示するために必要な色の数を減らすのが容易になるため、ファイル サイズが (場合によってはかなり大幅に) 縮小されます。
例として、Google はメイン検索ページのメイン ロゴに対してこれを行っていました。そのロゴの 4 つの分割画像を参照してください。
スライスの欠点は、メンテナンス コストが増加することです。これらの画像分割を維持し、アプリが変化し続けるときに問題が発生しないようにする必要があります.
次のコードを試してください:
//in .h file declare the following objects:
IBOutlet UIImageView *imgTest;
-(IBAction)buttonTapped:(id)sender;
-(void)LoadImage:(NSString *) irlString;
-(void)setImage:(NSData *) imgData;
//in .m file write the following code:
-(IBAction)buttonTapped:(id)sender
{
[self performSelectorOnMainThread:@selector(LoadImage:) withObject:@"http://www.google.com/images/errors/logo_sm.gif" waitUntilDone:NO];
}
-(void)LoadImage:(NSString *) urlString
{
NSURL *imgURL=[NSURL URLWithString:urlString];
NSData *imgData=[NSData dataWithContentsOfURL:imgURL];
[self performSelectorInBackground:@selector(setImage:) withObject:imgData];
}
-(void)setImage:(NSData *) imgData;
{
imgTest.image=[UIImage imageWithData:imgData];
}
画像の読み込み中にアクティビティ インジケーターを使用することもできます。buttonTapped メソッドで開始し、setImage メソッドで停止します。
これがお役に立てば幸いです。