3

コンソールを使用して、リロードされるかどうかを確認し、cellForRowAtIndexPath. これにより、テーブル ビューが一瞬動かなくなります。画像のせいだと思っていたのですが、今は問題がわかりません。どんな助けでも素晴らしいでしょう。


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSLog( @"Cell loading" );
    static NSString *CellIdentifier = @"showVideo";
    CustomVideoCell *cell = (CustomVideoCell*) [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil)
    {
        cell=[[CustomVideoCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] ;
    }


    NSURL *url = [NSURL URLWithString:[data objectForKey:@"profilepicture"]];
    NSData *data = [NSData dataWithContentsOfURL:url];

    [cell.playimage setImageWithURL:[NSURL URLWithString:[data objectForKey:@"profilepicture"]]
                 placeholderImage:[UIImage imageNamed:@"placeholder.png"]];

    return cell;

}
4

2 に答える 2

3

この行は問題を引き起こします:

NSData *data = [NSData dataWithContentsOfURL:url];

これは同期呼び出しであるため、スクロール中にラグを感じます。

メイン スレッドでそのようなメソッドを呼び出さないでください。アプリが応答しなくなります。データが多すぎると、ダウンロードに時間がかかるため、UIEvents への応答に時間がかかります。

ダウンロードしたら、画像をキャッシュする必要があります。そうしないと、テーブルがリロードされるたびに再度ダウンロードされます。画像が既にダウンロードされている場合は、キャッシュから表示する必要があります。再度ダウンロードしないでください。でこれを処理する必要がありますcellForRowAtIndexPath。これらのタスクを実行するための独自のコードを作成することも、次のサンプルを利用することもできます。

次のライブラリ/ソース コードを確認してください。

  1. HJキャッシュ
  2. LazyTableImages
  3. SDWebImage
于 2012-12-19T09:19:18.050 に答える
0

SDWebImageを使用します。これにより、画像を非同期でダウンロードし、キャッシュを管理することがはるかに簡単になります。

于 2012-12-19T09:22:40.457 に答える