2017-08-28 8 views
3

私はUITableviewCellのSDWebImageという非同期(背景)画像の読み込みにライブラリを使用しています。しかし、テーブルビューをスクロールするときには、まだまだ大きな遅れに直面しています。画像ビューに画像を読み込むときにiOSのtableviewがスクロールします

何か間違っていますか?

ロードされたイメージのサイズは約かなり大きいですセルにイメージをロード1000×1000

コード:

-(void)viewDidLoad{ 
    [super viewDidLoad]; 
NSString *identifier = @"newsItem"; 
UINib *nib = [UINib nibWithNibName:@"NewsTableViewCell" bundle:nil]; 
[self.tableView registerNib:nib forCellReuseIdentifier:identifier]; 


self.dataSource = [[NewsDataSource alloc] initWithQuery:[self getQuery] 
              populateCell:^UITableViewCell * _Nonnull(UITableView * _Nonnull tableView, 
                        NSIndexPath * _Nonnull indexPath, 
                        FIRDataSnapshot * _Nonnull snap) { 

               NewsItem *newsItem = [[NewsItem alloc] initWithDictionary:snap.value]; 


               NSURL *url = [NSURL URLWithString:newsItem.image]; 

               NSString *imageUrl = url.absoluteString; 
              NSData *data = [NSData dataWithContentsOfURL:url]; 


               NewsTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier]; 
              cell.image.layer.masksToBounds = YES; 
               cell.Title.text = newsItem.title; 
               cell.category.text = [newsItem.categories objectAtIndex:0]; 
               cell.subTitle.text = newsItem.subTitle; 

               [cell.image sd_setImageWithURL:[NSURL URLWithString:imageUrl] 
                  placeholderImage:[UIImage imageNamed:@"image.png"]];       
               cell.image.contentMode = UIViewContentModeScaleAspectFill; 
               [cell.image setFrame:CGRectMake(0,0,cell.frame.size.width,cell.frame.size.height)]; 

               cell.selectionStyle = UITableViewCellSelectionStyleNone; 

               return cell; 
              }]; 

[self.dataSource bindToView:self.tableView]; 
self.tableView.delegate = self; 
} 
+2

cellforrowatindexpathのコード全体を表示できますか? –

+0

セルに情報をロードするためのコード全体が追加されました – kosas

+1

この行を削除してください 'NSData * data = [NSData dataWithContentsOfURL:url];'と – Krunal

答えて

4

ソースコードから次の行を削除します。これは、テーブルビューセルのアクティブ化中(セルが再利用されるたびに)にイメージデータをダウンロードするためです。また、データフォアグラウンドをロードする可能性があり、それがテーブルビューをスクロールするときの遅れの原因になる可能性があります。次のコード

NSData *data = [NSData dataWithContentsOfURL:url]; 

は(バックグラウンドで画像のダウンロードや前景にそれが見えるように)画像表現を処理し、あなたのテーブルビューセルのため。したがって、上記のコードはあなたのセルでは必要ありません。

[cell.image sd_setImageWithURL:[NSURL URLWithString:imageUrl] placeholderImage:[UIImage imageNamed:@"image.png"]]; 
2

:ここ

[cell.image sd_setImageWithURL:[NSURL URLWithString:imageUrl] 
      placeholderImage:[UIImage imageNamed:@"image.png"]]; 

私はテーブルビューのセルにすべての情報をロードしていますこの行を削除する必要があります

NSData *data = [NSData dataWithContentsOfURL:url]; 
関連する問題