まとめ-UItableView(パフォーマンス最適化①)

2745 ワード

注:文章は絶えず更新して、文章を転載して作者をプラスして下さい
まとめ-UItableViewでは、以下のコードに示すように、UITableViewにデータを表示させるためのプロトコル呼び出し方法について説明している.

// , , ,
// cell , ( )
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:nil];
    
    Apple *apple = self.apple[indexPath.row];
    
    cell.textLabel.text =apple.name;
    
    cell.detailTextLabel.text = apple.intro;
    
    cell.imageView.image = [UIImage imageNamed:apple.icon];
    
    return cell;
}


悪い点:(性能への影響)
1 . 最初から表示範囲の複数のオブジェクトを作成
2 . 呼び出しごとに割り当てる
新しいストレージスペースは、UItableViewCellオブジェクトを作成します.つまり、スクロールが速く、すばやくスクロールすると、メモリが急に高くなります.(「UItableViewCell alloc」)
パフォーマンスの最適化:
パフォーマンスの最適化の考え方:
画面が表示されない場合
8個のUItableViewセルを導入
キャッシュプールメカニズムは、次のスクロールを続けると作成されます.
9枚目のUItableViewCell、そして
最初のUITableViewCellが完全に消えたとき、それを入れます.
キャッシュプールで、
10枚目のUItableViewCellを再作成する必要がある場合、
キャッシュプールからの取り出し
最初のUITableViewCellは、周にわたって再開された.
だから画面にCellが8個しか表示する場合は、破棄するまで9個のCellオブジェクトを作成すればよい.プロセス全体をスクロールしてもUItableViewセルを複数作成する必要はありません
注意点:
開発プログラムが複雑な場合、
キャッシュプール
中にはいろいろなものが入っていて、たくさんのcellなどがあるので、cell対応のUItableViewを区別するのはどのように知っていますか?
解決策:UItableViewCellを作成するたびに、タイプ(表示など)をバインドし、
キャッシュプール[color=blue][color]で探す場合は、タイプ(表示など)に応じて対応する
cell再利用用
手順:
1.識別により、キャッシュプール内でリサイクル可能なcellを探す
2.キャッシュプールが見つからない場合は、リサイクル可能なcell:新しいcellを作成し、cellに識別子を貼ります.
3.cellに新しいデータを設定.
コードは次のとおりです.


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
   //0. static :  ( )
    static NSString *ID = @"Apple";    

    //1.  , cell
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];
    
    //2.  ,  cell:  cell ,  cell 
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:ID];
    }
    
    //3  Cell . cell .
    Apple *apple= self.apple[indexPath.row];
    
    cell.textLabel.text =apple.name;
    
    cell.detailTextLabel.text = apple.intro;
    
    cell.imageView.image = [UIImage imageNamed:apple.icon];
    
    
    NSLog(@"%p  -  %@   -   %ld ",cell,apple.name,indexPath.row);
    
    return cell;
}