0
 The uitableview view gets slow while receiving images from server through Json

` -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    NSString* CellIdentifier = [NSString stringWithFormat:@"Cell%d",indexPath.row];
    UITableViewCellFixed *cell = (UITableViewCellFixed *) [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (cell == nil) {
        cell = [[[UITableViewCellFixed alloc] initWithStyle:UITableViewCellStyleSubtitle 
                                            reuseIdentifier:CellIdentifier] autorelease];;
    }

   NSURL *url = [NSURL URLWithString:[dict objectForKey:@"allfeeds3"]];
    NSData *data = [[NSData alloc] initWithContentsOfURL:url];
 // cell.imageView.image = [UIImage imageWithData:data];
    UIImage *tmpImage = [[UIImage alloc] initWithData:data];
    cell.imageView.image = tmpImage;

}
4

1 に答える 1

1

コードが非常に似ているため、これと同じ質問が以前に尋ねられたと確信しています。

データソースがデリゲートに要求するたびに、新しいセルを作成しています。このコード行:

 NSString* CellIdentifier = [NSString stringWithFormat:@"Cell%d",indexPath.row];

その結果、毎回新しいセルが作成されます。各セルが (コンテンツではなくレイアウトに関して) 同じである場合は、再利用識別子に単一の静的 NSString を使用します。このようにして、テーブルビューは毎回作成するのではなく、再利用可能なセルをキューから引き出そうとします。

さらに、メインスレッドでデータをダウンロードしようとしているようです。そして、セルが再利用される場合でも、新しい UIImageView を割り当て/初期化します。UITableViewCell をサブクラス化し、layoutSubviews で UIImageView をセットアップするか、ペン先からロードする必要があります。これに対するアプローチ全体を再考する必要があります。気をつけて。

于 2012-04-09T16:25:11.283 に答える