2017-11-13 1 views
0

0.5秒ごとにリフレッシュされるテーブルビューがあります。頻繁に更新されるTableViewの流暢性を確保するにはどうすればよいですか?

私はそれのために何ができるのFPS減少

原因tableView reloadDataまたはreloadSections: withRowAnimation:

それらの両方をuesd?

のtableViewは、新しいデータごとに0.5秒

と新しいデータを表示する必要があり、すぐに

コード:

- (void)registerTableViewCells { 
    [self.tableView registerClass:[UITableViewCell1 class] forCellReuseIdentifier: UITableViewCell1Identifier]; 
    [self.tableView registerClass:[UITableViewCell2 class] forCellReuseIdentifier: UITableViewCell2Identifier]; 
    [self.tableView registerClass:[UITableViewCell3 class] forCellReuseIdentifier: UITableViewCell3Identifier]; 
} 

- (void)makeUpDisplaySource { 
    NSMutableArray *arrM = [NSMutableArray array]; 
    [arrM addObject:@[UITableViewCell1Identifier, @(60), @(1)]]; 
    [arrM addObject:@[UITableViewCell2Identifier, @(55), @(10)]]; 
    [arrM addObject:@[UITableViewCell3Identifier, @(30), @(10+_fortySeat*30)]]; 
    // _fortySeat is boolValue 
    self.displaySource = arrM; 
} 

のtableViewデリゲート

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    NSArray *dataArr = self.displaySource[indexPath.section]; 
    NSString *identifier = dataArr[0]; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier forIndexPath:indexPath]; 
    return cell; 
} 

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath { 

    if ([NSStringFromClass(cell.class) isEqualToString:@"UITableViewCell1"]) { 
     UITableViewCell1 *newcell = (UITableViewCell1 *)cell; 
     [newcell updatCellUI]; 
    } 
    else if ([NSStringFromClass(cell.class) isEqualToString:@"UITableViewCell2"]) { 
     UITableViewCell2 *newcell = (UITableViewCell2 *)cell; 
     [newcell updatCellUIBuy: model1 sell: model2]; 
    } 
    else if ([NSStringFromClass(cell.class) isEqualToString:@"UITableViewCell3"]){ 
     cell.backgroundColor = GL_CELL_BACKGROUD_COLOR; 
     [cell addSubview:self.someView];// someView is a lazy property 
    } 
} 
+0

リロード全テーブルデータの再ロードセクションのみを使用できます –

+0

1)コードを最適化してください。 2)0.5秒ごとにテーブルを再使用しないでください。 3)セルに更新ラベルがある場合は、そのセル内でラベルを更新します。 4)あなたが何を表示するかについてのより多くの情報が必要です(画像/テキスト/ etc) –

答えて

0

再利用可能な使用していない場合細胞は、もちろん、0.5秒ごとにデータをリロードすると、FPSの問題を引き起こす可能性があります。bあなたのTableViewにあるすべてのセルのデータをリロードします。

また、データをreloadSections:でリロードしても、変更したすべてのセルを再読み込みすると問題が発生します。見えない人さえも。 - これは問題を引き起こす可能性があります。その場合


私はあなたをお勧め:

  1. 用途:[self.tableView registerNib:[UINib nibWithNibName:@"TableViewCell" bundle:nil] forCellReuseIdentifier:@"CellID"];

    これはXIBファイルとIDの下のセルの下にあなたのtableViewを登録します。 cellForRowAtIndexPath:

  2. このIDを使用してセルをロード: UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"CellID"];

    再利用可能な細胞を用いて、あなたのテーブルビューをロードする速度が向上しますし、それをリフレッシュしながら、それはあなたを助けるかもしれません。あなたは既に再利用可能な細胞を使用している場合


は、私は人々があなたの質問にそれを知っているように、あなたをお勧めします。 再利用可能なセルを使用していても、FPSに問題が残っている場合は、2回のリロードの間隔を少し減らすことができます。

私はあなたの質問を完全に理解していないかもしれないし、特定の点で間違っているかもしれない。もちろん、私の答えを知らせたり編集したりするのをためらうことはありません。私はそれを評価します。

+0

あなたの答えをありがとう、私はすでにいくつかのコードを提供しています – CoderYL

+0

私はあなたを見つけるでしょうが、@ biloshkurskyi-リロードするデータがたくさんある場合は、0.5秒ごとにテーブルをリロードしないようにしてください。 –

関連する問題