0

私が持っているのはtableViewです。各セルには、画像と名前、およびその横にいくつかの詳細が表示されています。画像はサーバー上にあります。画像については、以下のとおりです。

UIImageView *imagePathImage = (UIImageView *)[cell viewWithTag:9999999984];
test1 = [NSString stringWithFormat:@"%@", [[news objectAtIndex:indexPath.row] objectForKey:@"imagePath"]];
if ([test1 isEqualToString:@"missing"]) {
    imagePathImage.image = [UIImage imageNamed:@"no_image.png"];
} else {
    imagePathImage.image = [[UIImage imageWithData: [NSData dataWithContentsOfURL: [NSURL URLWithString:[NSString stringWithFormat:@"http://www.mysite.com/sama/myImages/image%@.jpg", [[news objectAtIndex:indexPath.row] objectForKey:@"id"] ]]]] retain];
}

JSON形式でデータを取得しています。

問題は、下にスクロールしているときに、サーバーパスを指定した画像の場合、次のアイテムの読み込みに時間がかかることです。画像コードを非表示にすると、スクロールがはるかに高速になります。ただし、画像がある場合、画像の読み込みに時間がかかります。

私の質問は、iPhoneアプリでのこのような動作は問題ないか、最初に画像を(ローカルで)ダウンロードしてから表示する必要があるかどうかです。

また

画像を保存しているときに、画像アイコンのサイズが60x60なので、画像の解像度を60x60変更する必要があります。


編集1

私はマイケルロビンソンの答えを使用しました。サイズを変更するには、以下のリンクのコードを使用しました。

画像のサイズを変更する

4

4 に答える 4

0

アプリで使用する最大サイズよりも大きくならないように画像のサイズを変更します。これにより、メモリが節約され、ダウンロード時間が短縮されます。

これで問題が解決しない場合、またはパフォーマンスが十分に向上しない場合は、スクロールして表示される画像の遅延読み込みを調べてください。

編集:他の人が言ったように、別のスレッドで非同期にロードする必要もあります。

于 2013-03-07T11:43:35.417 に答える
0

まず、画像をEGOImageViewで非同期にロードするか、NSThread でスレッドに分割してロードします。

NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(requestImageFromServer) object:nil];
[thread start];

次に、すでにロードされているイメージをキャッシュします。EGOImageView には既にこれがあります。独自のロジックを使用して、画像をファイルシステムに保存して取得し、以前に nil と比較します (NSFileManager を使用)。

于 2013-03-07T13:51:32.143 に答える
0

画像の遅延読み込みを試してください。ここで例を得ることができます。

于 2013-03-07T11:48:45.490 に答える
0

それらを非同期にロードします。

このチュートリアルを見てください。理解しやすく、必要なことをほぼ正確に実行します。 http://www.markj.net/iphone-asynchronous-table-image/

于 2013-03-07T11:50:20.800 に答える